迭代控制的循环无法正常工作

时间:2017-11-14 20:32:10

标签: c

以下应该生成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);

2 个答案:

答案 0 :(得分:2)

这可以更有效地完成。

从一个号码开始,

num2 = rand()%50 + 1;

这将是较低的数字。如果它大于50,则没有可能的第二个数字 然后,计算num1可能的数量。由于num1必须是num2的倍数,且小于或等于100,并且可能与num2不同:

int nnum1 = 100/num2 - 1;

,只需选择一个:

num1 = (rand()%nnum1 + 2)*num2;

Live demo here

答案 1 :(得分:1)

如果您希望满足所有条件,则while - 条件实际上应与while(num1 < num2 || (num1%num2 != 0) || num1== 0 || num2 == 0)类似。如果您按&&连接条件,则一旦满足其中一个条件,循环将结束,例如当num1无法被num2整除时。