繁体   English   中英

如何根据用户输入在一定范围内生成随机数但不重复?

[英]How do I generate random numbers but not repeating and within a certain range based on user input?

目前,我正在试验一些关于/关于随机数的代码。 问题是,当我运行程序时,输入任何数字(例如 12),我有时会得到正确的答案,有时会得到错误的答案。 正确答案必须是基于用户输入的任何非重复随机数。 (例如输入 5,output 必须为 1.seats[12]=1, 2.seats[19]=1,..., 5.seats[47]=1)。 我不知道该怎么做,是的,请帮助我的编码员!

这是代码:

#include<stdio.h> 
#include<conio.h>
#include<time.h>
main()
{
    int x,y,chc1A,seats[50]={};
    printf("Enter a number: ");
    scanf("%d",&chc1A);
    srand(NULL);
    for(x=0;x<chc1A;x++)
    {
        if(seats[rand()%50]==0)
            seats[rand()%50]=1;
        else
            x--;
    }
    for(x=0,y=1;x<50;x++)
        if(seats[x]==1)
        {
            printf("%d. seats[%d] = %d\n",y,x,seats[x]);
            y++;
        }
    getch();
}

我真的不知道怎么了,请赐教。

我在 Dev C++ 上运行并编码

我想要做的是:生成 0-49 之间的随机数并将其放入数组中 seat seats[50] (例如 38 然后将 1 放入数组seats[38]中)。 顺便说一句,这个代码代表坐在有 50 个座位的公共汽车上的乘客。 所以“1”表示座位已被占用。

这部分可能会导致问题。

for(x=0;x<chc1A;x++)
{
    if(seats[rand()%50]==0)
        seats[rand()%50]=1;
    else
        x--;
}

我认为通过

    if(seats[rand()%50]==0)
        seats[rand()%50]=1;

您打算生成一个随机数,将其用作seats的索引,如果seats[random_no]0 ,则将seats[random_no]设置为1

但是if语句中的随机数和它的主体中的随机数是不同的数字。

你可以使用

    int index = rand()%50;
    if(seats[index]==0)
        seats[index]=1;

考虑更改main() function 的签名。 请参阅C 的 main() function 的有效签名是什么?


conio.h 不是标准的一部分,尽量避免使用它。 getch()也是如此,因为它来自 conio.h。


srand()需要一个unsigned int作为参数,而NULL不是该类型。 这里

包括stdlib.h以使用srand()


检查scanf()的返回值是个好主意。 你可以看看它是否失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM