帮助UNNOBY我的C++作业
特别是,twoify函数似乎是noobis。这是一种鞅赌注模式,基本上每次输掉的赌注都是之前赌注的两倍,直到赢。不清楚为什么twoify是一种递归方法。也许这是在类中用来介绍或说明递归的,但显然这可以用num乘以2^的函数来代替。这可以用C语言的求幂数学运算符来表示,或者,如其他响应中所示,通过左移位操作来表示,移位的位数与指数乘以参数的位数相同,这里不清楚为什么twoify是一种递归方法。也许这是在类中用来介绍或说明递归的,但显然这可以用num乘以2^的函数来代替。这可以用C语言的求幂数学运算符表示,或者,如其他响应中所示,通过执行左移位操作,移位的位数与指数乘以参数的位数相同,这里首先,避免无用的递归,将其转化为迭代:帮助UNNOBY我的C++作业,c++,C++,特别是,twoify函数似乎是noobis。这是一种鞅赌注模式,基本上每次输掉的赌注都是之前赌注的两倍,直到赢。不清楚为什么twoify是一种递归方法。也许这是在类中用来介绍或说明递归的,但显然这可以用num乘以2^的函数来代替。这可以用C语言的求幂数学运算符来表示,或者,如其他响应中所示,通过左移位操作来表示,移位的位数与指数乘以参数的位数相同,这里不清楚为什么twoify是一种递归方法。也许这是在类中用来介绍或说明递归的,但显然这可以用num乘以2^的函数来代替。这可以用C语言的求幂数学运算
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int twoify(int num, int times)
{
num *= 2;
if (times > 0)
{
times--;
return twoify(num, times);
}
return num;
}
int main()
{
srand(time(NULL));
const int BET = 1;
const int TIMES = 100000;
const int CHANCE = 50;
int wins = 0;
int losses = 0;
int wstreak = 0;
int lstreak = 0;
int cwstreak = 0;
int clstreak = 0;
for (int i = 0; i < TIMES; i++)
{
int num = rand() % 100 + 1;
if (num <= CHANCE) // win?
{
wins++;
cwstreak++;
clstreak = 0;
if (cwstreak > wstreak)
wstreak = cwstreak;
}
else
{
losses++;
clstreak++;
cwstreak = 0;
if (clstreak > lstreak)
lstreak = clstreak;
}
}
cout << "Wins: " << wins << "\tLosses: " << losses << endl;
cout << "Win Streak: " << wstreak << "\tLoss Streak: " << lstreak << endl;
cout << "Worst lose bet: " << twoify(BET, lstreak) << endl;
system("PAUSE");
cout << endl << endl;
return main();
}
int twoify(int num, int times) {
return num << (times + 1); // num * 2**(times+1)
}
但是,如果保证时间>0,您可以做得更好,这也会简化上述版本,允许您使用a while而不是do/while,但无论如何…:
int twoify(int num, int times)
{
do {
num *= 2;
--times;
} while (times >= 0);
return num;
}
这种方法之所以有效,是因为它相当于将num乘以2,并提升到+1次方,这是递归和迭代版本都要做的。首先,避免无用的递归,将其转化为迭代:
int twoify(int num, int times) {
return num << (times + 1); // num * 2**(times+1)
}
但是,如果保证时间>0,您可以做得更好,这也会简化上述版本,允许您使用a while而不是do/while,但无论如何…:
int twoify(int num, int times)
{
do {
num *= 2;
--times;
} while (times >= 0);
return num;
}
这样做的原因是,它相当于将num乘以2,并提升到倍+1次方,这是递归和迭代版本都要做的。OP想取消noobify。对我来说,这意味着,除其他外,消除多余的递归。不过,OP想取消noobify。对我来说,这包括消除多余的递归。数学!爷爷,你的Twoiff5,0=10。应该是乘以而不是乘以+1。@codebliss:你错了,如果你想让函数输出与OP的函数相同的值,那就是乘以+1。OP的twoif5,0也是10.MATH!爷爷,你的Twoiff5,0=10。应该是times而不是times+1。@codebliss:你错了,如果你想让函数的输出与OP的函数相同,那么应该是times+1。OP的twoif5,0也是10。虽然我不同意在你的twoify实现中使用return语句,它的名称doubleN或类似的名称如何,但我很高兴你的间距是一致的且可读的。这一点很重要,要及早学习。不要带着这个算法去拉斯维加斯。通过工作赚钱更快,风险更小。是否移位:pI喜欢《联合国词典》,并期待着很快在词典中看到它。@wilhelmtell:同意。使用投注系统是我在这里看到的最愚蠢的事情。或许OP是想证明投注系统不起作用@帕维姆:我还以为是德·努比-虽然我不同意在twoify的实现中使用return语句,它的名称是doubleN或类似的,但我很高兴您的间距是一致的,可读性好。这一点很重要,要及早学习。不要带着这个算法去拉斯维加斯。通过工作赚钱更快,风险更小。是否移位:pI喜欢《联合国词典》,并期待着很快在词典中看到它。@wilhelmtell:同意。使用投注系统是我在这里看到的最愚蠢的事情。或许OP是想证明投注系统不起作用@帕维姆:我还以为是德·努比-