我遇到了这个问题,生成的兰特数没有按照我希望的方式增加。我尝试了多种方法来在用户输入 -1 时增加该值,或者在用户输入 1 时减少该值。如果用户输入 -1,则预计输出 x 应在第一个输出和上限值之间增加,如果用户输入 1,它应该在第一个输出和下限值之间找到一个。我的代码的一部分如下。如有任何帮助,我们将不胜感激。
我尝试过,但没有成功:
i = x (rand() % (upper + lower));
x = i +1;
部分代码:
switch(input)
{
case -1:
{
x = x+1+ (rand() % (upper-x-1));
printf("My guess is %d \n", x);
break;
}
case 0:
{
printf("I win\n");
break;
}
case 1:
{
x = (rand() % (upper+lower)) +lower;
printf("My guess is %d \n", x);
break;
}
default: printf("Wrong choice try again\n");
break;
编辑:更改了 -1 的情况,但它增加了 4,然后增加 1,并在 55 处停止,这是正确的,但我无法弄清楚跳过 4。我正在尝试另一种方法,即如果用户输入 lower = 1 upper = 55 如果生成的第一个数字是 35,那么它将在该范围内的 36-54 之间搜索,但像 42 这样的随机数不仅仅是加一。
最佳答案
在我看来,您试图以错误的方式生成随机数。要像您所描述的那样设置下限和上限,请尝试以下操作:
x = lower + (rand() % (upper-lower)); // lower <= x < upper
对于 -1 的情况,您可以尝试使用 x+1
作为下限。在减少数量的情况下,使上限等于x
。
case -1:
{
if (x < upper-1) {
x = x+1 + (rand() % (upper-x-1));
}
...
case 1:
{
if (x > lower) {
x = lower + (rand() % (x-lower));
}
...
我不确定您在 upper
和 lower
变量中定义的值,但只需确保下限小于上限。我还添加了一个可能发生被零除的特殊条件。
关于c - 减去或添加到随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392772/