C语言 怎么产生没有重复的一组随机数

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:40:24
int i,j,q,k,temp;
int red[6];
int hongqiu,lanqiu;
srand((unsigned)time(NULL));
for(i=0;i<=6;i++)
{

hongqiu=random(32)+1;
red[i]=hongqiu;

}
for(j=1;j<=12;j+=2)
{
for(i=0;i<=12;i+=2)
{
if(red[j]==red[i])
randomize();
red[j]=random(32)+1;
}
}

这段代码运行后还是有几率产生重复的数

望高手解答 谢谢
234369425
如果照你那样修改程序的话 产生的随机数的范围就会是1~34了

我 要 告诉你 双色球红球是33个,蓝球是16个
int i,j = 0,q,k,temp;
int red[6];
int hongqiu,lanqiu;
srand((unsigned)time(NULL));
for(i=0;i<=6;i++)
{
red[i]=random(33) ; //应该是33哦,在这后面添加判断语句
while(j < i)
{
if(red[j]==red[i])
{
red[i] = random(33)+1;
j = 0;
}
else
j++;
}
}

这样如果red[i]等于他前面
就跳不出while循环
直到付给他与前面不重复的值为止
楼上的也可以
不过我不习惯用break
如果break不好会出逻辑错误的

是吗???
求随机数还有公式的
能求在范围多少到多少的
如果用的VISUAL STDIO 按F1能找到

随机数是有几率产生重复的数,你可以把新产生的跟前面的每一个比较如果有相等的就重新产生。

修改如下:

int i,j,q,k,temp;
int red[6];
int hongqiu,lanqiu;
srand((unsigned)time(NULL));

for(i=0;i<6;i++)
{

hongqiu=random(32)+1;
red[i]=hongqiu;
for (j=0; j<i; j++) {
if (red[j]==hongqiu) {
i--;
break;
}
}
}