如何用C语言产生不重复的0到9之间的随机数

2024-10-31 18:32:55
推荐回答(4个)
回答1:

上面的会重复 ,用我这个

#include //标准工具库,要用到其中的rand()
#include
#include
#include //时间库,要用到里面的时间来做随机数的种子

int main(void)
{
int i;
int r;
int sz[10]={0,1,2,3,4,5,6,7,8,9};
srand(time(NULL));

printf("Ten random numbers from 0 to 9\n\n");
for(i=0; i<10; i++)
{
r=rand()%(10-i);

printf("%d\n",sz[r]);

for(int j=r;j<10;j++)
sz[j]=sz[j+1];

}
getch();
return 0;
}

回答2:

下面是用C产生0-9的随机数,rand()函数产生的是伪随机数,反复调用函数rand所产生的一系列数似乎是随机的,但每次执行程序所产生的序列则是重复的。需要用srand()函数每次给不一样的种子
#include //标准工具库,要用到其中的rand()
#include
#include
#include //时间库,要用到里面的时间来做随机数的种子

int main(void)
{
int i;
srand(time(NULL));

printf("Ten random numbers from 0 to 9\n\n");
for(i=0; i<10; i++)
printf("%d\n", rand()%10);
getch();
return 0;
}

回答3:

估计都是看网上资料钻了牛角尖。
要想随机数重复率低,最重要的就是种子数的选择。
网上列的使用time,这是有局限的。
time函数的最小单位为秒,对于这种执行特别快的程序来说,
重复率还是很高。
每次变换种子就是了。

下面的代码我用100试过了,在取100个随机数时,连续的重复率都很低。

#include
#include
using namespace std;
#define MAX 10
#define FLAG 20001010
int main(int argc, char* argv[])
{
int i;
unsigned int j;

for (i=0;i<10;i++)
{
j=FLAG+i;
srand( j );
cout<}
return 0;
}

回答4:

上面的会重复
,用我这个
#include

//标准工具库,要用到其中的rand()
#include

#include
#include

//时间库,要用到里面的时间来做随机数的种子
int
main(void)
{
int
i;
int
r;
int
sz[10]={0,1,2,3,4,5,6,7,8,9};
srand(time(NULL));
printf("Ten
random
numbers
from
0
to
9\n\n");
for(i=0;
i<10;
i++)
{
r=rand()%(10-i);
printf("%d\n",sz[r]);
for(int
j=r;j<10;j++)
sz[j]=sz[j+1];
}
getch();
return
0;
}