我一直在为我的计算机科学课做练习题,其中一篇文章是这样写的:
一双骰子被反复滚动。如果“盒子车”(6-6)出现,玩家A就会赢。如果没有,但是7连续出现了两次(如在一次中,一次显示7,然后在你再次滚动两次死亡之后,另一次出现),B获胜。编写一个C++程序,将一对骰子掷1000次,并输出A和B赢了多少次。
所以我已经得到了程序的主要骨干,并测试了它几次,但每次到目前为止,B球员表现为0次获胜。每次我运行程序时,A玩家的胜利都会波动,所以我相信A是正确编码的,但是任何提示或调试都会非常感谢。该方案:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int die1, die2, store = 0, awin = 0, bwin = 0;
srand(time(NULL));
for(int i = 0; i < 1000; i++)
{
die1 = rand()% 6+1;
die2 = rand()% 6+1;
if(die1 == 6 && die2 == 6)
{
awin++;
}
else if(die1 == 7 || die2 == 7)
{
store = 1;
}
if(store == 1 && die1 == 7)
{
bwin++;
store = 0;
}
else if(store == 1 && die2 == 7)
{
bwin++;
store = 0;
}
store = 0;
}
cout << "A has won " << awin << " times and B has won " << bwin << " times." << endl;
system("pause");}
发布于 2013-12-13 00:22:35
rand() % 7永远不会给出7的结果,它是一个数除以7的剩余部分,所以你会得到0到6之间的任何东西。
考虑到您的评论,只需检查一下die1 + die2 == 7,您就会得到排序。
发布于 2013-12-13 00:21:40
rand()%6+1返回范围为1-6。
只有在模具滚动到7的条件下才会分配store,而这种情况永远不会发生。
只有当bwin等于模具辊时,才会增加store,这也从来不会发生,因为存储被初始化为0,并且永远不能满足重新分配它的条件(滚动7)。
因此,bwin总是0,只有当两个骰子滚动6时,awin才会增加。
发布于 2013-12-13 00:23:46
贯穿这一部分的一切似乎都是正确的:
if(die1 == 6 && die2 == 6) {
awin++;
}就在这之后,事情就变得不一样了。
首先,检查前一卷是否为7,以及当前滚动是否与前一卷匹配:
if(store == 7 && store == die1 + die2) {如果结果为真,则b已获胜:
bwin++;
}然后存储当前卷的值,以便在下一个卷中了解它:
store = die1+die2;https://stackoverflow.com/questions/20556872
复制相似问题