以下应该生成0到100之间的2个随机数,遵循一定的规则。
这些规则是:
*两者都不能为0
* Num1必须大于Num2
* Num1必须可以被Num2(num1%num2位)
整除目前,循环适用于前两个点,但不是最后一个。它仍然生成num1不能被num2整除的数字。什么出错了?
do {
if (num1 == 0) {
num1 = rand()%100;
}
else if(num2 == 0) {
num2 = rand()%100;
}
else if (num1 < num2) {
num2 = rand()%100;
}
else if(num1 % num2 != 0) {
num2 = rand()%100;
}
a++;
printf("Loop no.:%d %d mod %d = %d %d / %d \n",a,num1,num2,num1%num2,num1,num2);
} while(num1 < num2 && (num1%num2 != 0) && num1 != 0 && num2 != 0);
答案 0 :(得分:2)
这可以更有效地完成。
从一个号码开始,
num2 = rand()%50 + 1;
这将是较低的数字。如果它大于50,则没有可能的第二个数字
然后,计算num1
可能的数量。由于num1
必须是num2
的倍数,且小于或等于100,并且可能与num2
不同:
int nnum1 = 100/num2 - 1;
,只需选择一个:
num1 = (rand()%nnum1 + 2)*num2;
答案 1 :(得分:1)
如果您希望满足所有条件,则while
- 条件实际上应与while(num1 < num2 || (num1%num2 != 0) || num1== 0 || num2 == 0)
类似。如果您按&&
连接条件,则一旦满足其中一个条件,循环将结束,例如当num1
无法被num2
整除时。