重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
前边输入自己搞定
网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了普宁免费建站欢迎大家使用!
假设前边输入了
n
个数字
到array数组中(数组可以定义大一点)
int
pR[6];
for(int
k=0;k6;k++)
{
pR[k]=rand()%n;//用随即函数生成
0到(n-1)之间的数字
for(b=0;bk;b++)//循环前边已经生成的随即数字
判断是否与当前生成的数字有重复的
{
if(pR[b]==pR[k])
{
k--;//
k自减
1
当前生成的随即数作废
从新循环
break;
}
}
}
for(int
i=0;i6;i++)//根据刚才生成的随机数
将对应位置的数据输出
{
printf("%d\n",array[pR[i]]);
}
randomize();
random(100);
都不是标准的库函数。
srand 产生 种子,用来初始化,供 计算伪随机数序列。
rand 计算随机数,用当前种子,即 默认种子或 srand 产生的 种子。
不同编译器,库函数名可能不同,但基本原理相同。一个产生种子,一个计算伪随机数序列。
如果不用srand 产生新的种子,伪随机数序列是不变的。达不到模拟“随机”的目的。
完整版纯C程序:
#includestdio.h
#includestdlib.h
#includetime.h
#define N 20
void sel_sort(int [],int); //选择排序
int search(int [],int,int); //查找
void insert(int [],int [],int,int); //插入
int num_by_mechine(void) //产生随机数
main()
{
int a[N],x;
int i,index,b[N+1];
srand(time(NULL)); //为随机数发生器rand()播种
for(i=0;iN;i++)
a[i]=num_by_mechine();
printf("before sel_sort...\n");
for(i=0;iN;i++)
printf("%4d",a[i]);
printf("\n");
sel_sort(a,N);
printf("after sel_sort...\n");
for(i=0;iN;i++)
printf("%4d",a[i]);
printf("\n");
printf("please input x:");
scanf("%d",x);
index=search(a,x,N);
if(index!=-1)
{
printf("find x,x=a[%d]!\n",index);
printf("delete a[%d]...\n",index);
for(i=index+1;iN;i++)
a[i-1]=a[i];
for(i=0;iN-1;i++)
printf("%4d",a[i]);
}
else
{
printf("no find!\n");
printf("after insert...\n");
insert(a,b,x,N);
for(i=0;iN+1;i++)
printf("%4d",b[i]);
}
}
int num_by_mechine(void)
{
return(rand()%100+1); //产生一个分布在1~100之间的随机整数
}
void sel_sort(int a[],int n)
{
int cur,i,t;
for(cur=0;curn-1;cur++)
for(i=cur;in;i++)
if(a[i]a[cur])
t=a[cur],a[cur]=a[i],a[i]=t;
}
int search(int a[],int x,int n)
{
int front=0,back=n-1,middle;
while(front=back)
{
middle=(front+back)/2;
if(xa[middle])
back=middle-1;
else if(xa[middle])
front=middle+1;
else
return(middle);
}
return -1;
}
void insert(int a[],int b[],int x,int n)
{
int i,j;
for(i=0;in;i++)
b[i]=a[i];
for(i=0;in;i++)
if(a[i]x)
{ for(j=n;ji;j--)
b[j]=b[j-1];
b[i]=x;
return;
}
b[n]=x;
}
把 srand( time(0) ); 放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了?
因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要一个种子。
你把 srand(time(0)) 放到循环前面就可以了。
原因: time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到! 也就是说,srand(time(0)) 连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。
如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand 就不一样了.但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。
另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。
rnd是vb中的随机函数,应该用rand();
函数说明
rand()会返回一随机数值,范围在0至RAND_MAX
间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。
srand((int)time(0));
是产生的随机数每次不一样。
#includetime.h
#includestdlib.h
main()
{
int
i,j;
srand((int)time(0));
for(i=0;i10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf("
%d
",j);
}
}
执行
5
8
8
8
10
2
10
6
9
9
2
9
7
4
10
3
2
10
8
7