[英]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.