C语言编写如何让输出随机元素的数组里不出现重复的元素

2025-01-31 12:44:43
推荐回答(5个)
回答1:

#include #include void main(){  int b[7];  int i, j, dup;   randomize();   /* 这一段代码可保证数组 b 内的 7 个随机数都不一样 */  for (i = 0; i < 7; ++i)  {    do    {      b[i] = rand() % 36; /* 产生随机数 */      dup = 0; /* 先假设没有重复 */      for (j = 0; j < i && !dup; ++j) /* 跟已经产生的数字一一比较 */      {        if (b[i] == b[j]) /* 如果重复了 */          dup = 1; /* 就记住是重复了 */      }    }    while (dup);  }   /* 这一段只是把结果打出以作验证 */  for (i = 0; i < 7; ++i)    printf("%d ", b[i]);  printf("\n");} 如果有看不懂的地方,请继续追问,一定会解释清楚。

回答2:

bool flag = false;//代表是否数组中已存在相同的数了,true是“是” false是“否”for(i=0;i<7;)
{ flag = false;int tmp = rand()%36; for(int j=0;j b[i]=rand()%36;
}思路只是这样,如果随机数是不同的就给数组赋值,如相同i就不自增,重新生成后,再比较,反复进行。

回答3:

给你提供个思路吧:没产生一个数,循环验证下是否与之前产生的数一致,如一致就重新生成

回答4:

#include
#include
#include
void main()
{
int i,pd[36],a[7],x;
srand(time(0));
for(i=0;i<36;i++)
pd[i]=0;
for(i=0;i<7;i++)
{
while(pd[x=rand()%36]==1);
printf("%d ",x);
}
}

回答5:

void main()
{
int b[7],q,p,mod,m,sign=0;
for(i=0;i<7;)
{
m=rand()%36;
q=0,p=i-1;
while(q<=p)
{
mod=(q+p)/2;
if(b[mod]>m)
q=mod+1;
else if(b[mod] p=mod-1;
else
{
sign=1;
break;
}
}
if(!sign)
{
b[i++]=m;
}
else
sign=0;
}
}