c - 减去或添加到随机数生成器

标签 c random

我遇到了这个问题,生成的兰特数没有按照我希望的方式增加。我尝试了多种方法来在用户输入 -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));
  }
...

我不确定您在 upperlower 变量中定义的值,但只需确保下限小于上限。我还添加了一个可能发生被零除的特殊条件。

关于c - 减去或添加到随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21392772/

相关文章:

c - 考虑到每个值都有唯一的对应值,如何随机显示数组中的值?

vba - 使用 VBA 在单元格范围内生成真正的随机数

c - 随机排列生成

c++ - 生成的依赖关系问题

c - 在 Tic-Tac-Toe 游戏中需要一些关于变量的帮助(初级编码员)

c - 如何在程序中自动插入 pragma

java - NextInt 强制关闭

java - 随机生成器每次都给我相同的数字

c - 该堆栈程序的内存分配不均匀

c - 将 pragma 扩展为注释(对于 doxygen)