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

用C语言产生10个随机数,都是0到9之间的数字,且不重复。
请高手给一个完整的。
先给50分,如果真的可以运行,再加50,绝不食言。

上面的会重复 ,用我这个

#include <stdlib.h> //标准工具库,要用到其中的rand()
#include <stdio.h>
#include<conio.h>
#include <time.h> //时间库,要用到里面的时间来做随机数的种子

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;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-30
下面是用C产生0-9的随机数,rand()函数产生的是伪随机数,反复调用函数rand所产生的一系列数似乎是随机的,但每次执行程序所产生的序列则是重复的。需要用srand()函数每次给不一样的种子
#include <stdlib.h> //标准工具库,要用到其中的rand()
#include <stdio.h>
#include<conio.h>
#include <time.h> //时间库,要用到里面的时间来做随机数的种子

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;
}
第2个回答  2008-12-30
估计都是看网上资料钻了牛角尖。
要想随机数重复率低,最重要的就是种子数的选择。
网上列的使用time,这是有局限的。
time函数的最小单位为秒,对于这种执行特别快的程序来说,
重复率还是很高。
每次变换种子就是了。

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

#include <stdio.h>
#include <iostream>
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<<rand()%MAX<<endl;
}
return 0;
}
第3个回答  2019-04-29
上面的会重复
,用我这个
#include
<stdlib.h>
//标准工具库,要用到其中的rand()
#include
<stdio.h>
#include<conio.h>
#include
<time.h>
//时间库,要用到里面的时间来做随机数的种子
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;
}
相似回答