如何生成无限随机数的一对骰子直到它们相等?
How do I generate infinite random numbers of pair of dice until they are equal?
我正在尝试模拟一个程序,该程序将掷一对骰子并生成结果,直到变量相等,但我无法弄清楚。
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
const int MIN_VALUE = 1;
const int MAX_VALUE = 6;
int die1,die2;
unsigned seed = time(0);
srand(seed);
die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
while(die1 == die2); {
die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
cout<<"Value of die 1 is"<<die1<<endl;
cout<<"Value of die 2 is" <<die2<<endl;
cout<<endl;
}
return 0;
}
这里有几个问题:
while
语句开始的行尾的 ;
表示 while
没有连接到下面的代码块。去掉它。 (如果 die1
值本身在开始时等于 die2
,那么您本身就会有一个无限循环。)
要检查的条件是die1 != die2
因为你想掷骰子只要它们不相等。
参见Demo。
while(die1 == die2);
中有两个错误。
==
使循环在值相等时继续,但您想要相反的结果。
如果两个骰子开始时相等,则条件可能是无限的(因为重掷永远不会发生,见下文)。
否则它将是 "never".
分号会阻止 while
对后面的 {}
产生任何影响,它会被恰好执行一次,以防循环不是无限的,否则永远不会。
所以改为:
while(die1 != die2)
{
/* reroll */
}
如果您想使代码更易于维护和阅读,请调查有关 do {} while();
。
我正在尝试模拟一个程序,该程序将掷一对骰子并生成结果,直到变量相等,但我无法弄清楚。
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
const int MIN_VALUE = 1;
const int MAX_VALUE = 6;
int die1,die2;
unsigned seed = time(0);
srand(seed);
die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
while(die1 == die2); {
die1 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
die2 = (rand()%(MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
cout<<"Value of die 1 is"<<die1<<endl;
cout<<"Value of die 2 is" <<die2<<endl;
cout<<endl;
}
return 0;
}
这里有几个问题:
while
语句开始的行尾的;
表示while
没有连接到下面的代码块。去掉它。 (如果die1
值本身在开始时等于die2
,那么您本身就会有一个无限循环。)要检查的条件是
die1 != die2
因为你想掷骰子只要它们不相等。
参见Demo。
while(die1 == die2);
中有两个错误。
==
使循环在值相等时继续,但您想要相反的结果。
如果两个骰子开始时相等,则条件可能是无限的(因为重掷永远不会发生,见下文)。
否则它将是 "never".
分号会阻止 while
对后面的 {}
产生任何影响,它会被恰好执行一次,以防循环不是无限的,否则永远不会。
所以改为:
while(die1 != die2)
{
/* reroll */
}
如果您想使代码更易于维护和阅读,请调查有关 do {} while();
。