该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
要求是单人掷骰子,一直扔,扔到2-6之间数字就叠加,直到总和大于20;扔到1的话这轮立即结束并且总和归0。举个例子,扔了6次点数分别为2、5、6、2、4、3,扔到第5次的时候可以继续扔,因为2+5+6+2+4=19<20,所以扔第6次,最后这轮总和为22。但如果第六次扔到了1,那总和就是0。很简单的游戏。
老师规定必须srand(1000),程序要先请求用户输入一个数字,代表扔的轮数。最终结果其实只有7种情况,0、20、21、22、23、24、25,得到以上最终结果之后算一轮。用户输入要估算的轮数之后,比如10000,那就需要程序循环10000次,然后最终算出10000次中7种结果的出现概率。比如20出现了1000次,那概率就是0.1(10%)。就这么一个程序。
我的代码:
#include
#include
using namespace std;
int main()
{
srand(1000);
int dice = 0; //骰子点数
int turns = 0; //回合数
int score = 0; //总分
int time0 = 0; //扔到0的次数
int time20 = 0; //扔到20的次数
int time21 = 0;//扔到21的次数
int time22 = 0;//扔到22的次数
int time23 = 0;//扔到23的次数
int time24 = 0;//扔到24的次数
int time25 = 0;//扔到25的次数
float prob0 = 0.0; //扔到0的概率
float prob20 = 0.0; //扔到0的概率
float prob21 = 0.0; //扔到0的概率
float prob22 = 0.0; //扔到0的概率
float prob23 = 0.0; //扔到0的概率
float prob24 = 0.0; //扔到0的概率
float prob25 = 0.0; //扔到0的概率
cout << " Hold-at-20 turn simulations? ";
cin >> turns; //用户输入回合数
for (int i=0; i < turns; ++i)
{
while (score < 20)
{
dice = 1 + rand()%6;
cout << dice;
if (dice > 1)
{
score = score + dice;
}
else if (dice == 1)
{
score = 0;
break;
}
}
if (score == 0)
{
time0++;
}
else if (score == 20)
{
time20++;
}
else if (score == 21)
{
time21++;
}
else if (score == 22)
{
time22++;
}
else if (score == 23)
{
time23++;
}
else if (score == 24)
{
time24++;
}
else if (score == 25)
{
time25++;
}
}
prob0 = static_cast(time0 / turns);
prob20 = static_cast(time20 / turns);
prob21 = static_cast(time21 / turns);
prob22 = static_cast(time22 / turns);
prob23 = static_cast(time23 / turns);
prob24 = static_cast(time24 / turns);
prob25 = static_cast(time25 / turns);
cout << " score " << " Estimated Probability " << endl;
cout << " 0 \t" << prob0 << endl;
cout << " 20 \t" << prob20 << endl;
cout << " 21 \t" << prob21 << endl;
cout << " 22 \t" << prob22 << endl;
cout << " 23 \t" << prob23 << endl;
cout << " 24 \t" << prob24 << endl;
cout << " 25 \t" << prob25 << endl;
return 0;
}
现在我的问题就是,每次执行完一个for循环之后,再回到新的循环,rand()所产生的数字还是跟上个回合一样。比如上个回合我dice得到了523254的值,下一次还是523254,导致总和永远是21,最后概率里现实的也是prob21=1,其余都是0。这个程序应该怎么改,让rand()在每次产生的数字组合都不一样,这个程序就完成了。