目前,我正在试验一些关于随机数的代码。问题是,当我运行程序时,输入任何数字(例如12),我,有时得到正确的答案,有时得到错误的答案。正确答案必须是基于用户输入的任何非重复随机数。(例如输入5,输出必须为1。座位[12]=1,2。座位[19]=1,…,5。座位[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之间的随机数并将其放入数组中。(例如38,然后将1放入数组seats[50])。顺便说一下,这个代码代表坐在有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()函数的签名。见What are the valid signatures for C's main() function?
conio.h不是标准的一部分,请尽量避免使用它。从conio.h得到的getch()也一样。
srand()需要一个unsigned int作为参数,NULL不属于该类型。见here
包括stdlib.h以使用srand()
检查scanf()的返回值是个好主意。你可以看看它是否失败了。

09-05 18:47
查看更多