对大学的C ++课程进行了介绍,我们得到了这个项目来为网球游戏“建模”。
用户首先需要输入玩家a获胜的概率。 然后生成一个介于1到100之间的数字,直到一个玩家获得4分以上,并且比其他玩家多获得2分。
我的问题是,有时胜率在50%左右时,输出为4-4。
我想知道为什么会这样吗? 任何帮助将不胜感激!
int prob;
int scoreA = 0;
int scoreB = 0;
int randNB = 0;
srand(time(NULL));
cout <<"---------------\n"
"FAKE TENNIS!\n"
"---------------" <<endl;
cout <<"What is the chance that player \'A\' will win a point?(Enter whole #between 1 - 100): " ;
cin >> prob;
do{
if((scoreA >= 4 || scoreB >= 4) && ((scoreA - scoreB) >= 2 || (scoreB - scoreA) >= 2)) break;
randNB = rand()%100+1;
if (randNB <= prob){
cout<<"A";
scoreA++;
}
else if(randNB > prob){
cout<<"B";
scoreB++;
}
}
while((scoreA <= 3|| scoreB <= 3) && ((scoreA - scoreB) !=2 || (scoreB - scoreA) !=2 ));
cout<<"The final score is " <<scoreA <<" (A) - " << scoreB <<" (B)" <<endl;
if(scoreA > scoreB){
cout <<"A is the winner!!!";
}
else{
cout <<"B is the winner!!!";
}
return 0;
}
答案 0 :(得分:0)
您已经编写了两次结束循环测试。
在循环中一次(正确)为正,在循环结束时一次为负。
1)只写一次。 (“中断”将结束循环。)也就是说,将do {...} while(...)替换为while(true){...}
2)如果要编写两次,请在第二个测试中检查<2
而不是!= 2
。 x> = 2的取反不是x!= 2