#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();
}
Run Code Online (Sandbox Code Playgroud)
特别是,twoify()功能似乎是noobis.这是一个鞅赌注模式,基本上每一次失败都会使你之前的赌注加倍,直到你赢了.
首先,避免无用的递归,将其转换为迭代:
int twoify(int num, int times)
{
do {
num *= 2;
--times;
} while (times >= 0);
return num;
}
Run Code Online (Sandbox Code Playgroud)
但是,你可以做得更好(如果times > 0有保证,这也可以简化上面的版本,允许你使用while而不是do/ while,但是,无论如何......):
int twoify(int num, int times)
{
return num << (times + 1);
}
Run Code Online (Sandbox Code Playgroud)
这个工作的原因是它相当于将num乘以2乘以(times + 1)次幂,这就是递归和迭代版本都能做到的.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |