产生m个不同的随机数

来源:百度知道 编辑:UC知道 时间:2024/05/07 05:14:42
产生m个小于limit的不同随机数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{int i,m,j,kz;
long limit,a[100],t;
printf("Input m(<100):\n");
scanf("%d",&m);
printf("Input the maximum number:\n");
scanf("%ld",&limit);
if(limit<m)
{printf("Data error,limit<m!\n");
return 0;
}
srand((unsigned long)time(0));
a[1]=(long)rand()*limit/(RAND_MAX+1)+1;
for(i=2;i<=m;i++)
{while(1)
{kz=1;
t=(long)rand()*limit/(RAND_MAX+1)+1;
for(j=1;j<i;j++)
if(t==a[j])
{kz=0;
break;
}
if(kz)
{a[i]=t;
break;
}
}
printf("%6ld\n",a[i]);
}
getch();
}
为什么用win-tc出来的大多是负数,而用djgpp什么也没有?谢谢各位高手了
书上说,(long)rand()*limit/(RAND_MAX+1)+1能使值的范围在[1,limit]中,从而避免生

产生随机数应该是
1.0*rand()/RAND_MAX*limit吧
RAND_MAX+1应该结果溢出了吧。

#include<time.h>
#include<stdlib.h>
srand(time(NULL));
c=1+rand()%v
v是你希望的范围最大的数字
这样就能得到1~v之间的随机数字