目前,我正在试验一些关于随机数的代码。问题是,当我运行程序时,输入任何数字(例如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()
的返回值是个好主意。你可以看看它是否失败了。