掷骰子c语言getrand函数,c++掷骰子的问题,新手求教,问题很简单但对rand()卡住了...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

要求是单人掷骰子,一直扔,扔到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()在每次产生的数字组合都不一样,这个程序就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值