gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:27 25 4
gpt4 key购买 nike

目前,我正在试验一些关于随机数的代码。问题是,当我运行程序时,输入任何数字(例如 12),我有时会得到正确的答案,有时会得到错误的答案。正确答案必须是基于用户输入的任何非重复随机数。 (例如输入 5,输出必须是 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之间的随机数,放入数组seats[50]。 (例如 38 然后将 1 放入数组 seats[38])。顺便说一句,这段代码代表坐在一辆有 50 个座位的公共(public)汽车上的乘客。所以“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,请设置 座位 [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 不是标准的一部分,尽量避免使用它。 getch() 也是如此,因为它来自 conio.h。


srand() 需要一个 unsigned int 作为参数,而 NULL 不是那种类型。参见 here .

包含 stdlib.h 以使用 srand()


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

关于c - 如何根据用户输入生成随机数但不重复且在一定范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com