C语言如何从0-9产生4个不重复的随机数

例如:2790 正确
3385 错误,因为"3"重复了
最好帮忙给一下代码,完美的可以加分,谢谢!!
C++也可以啊

第1个回答  2008-04-13
利用空间换时间的策略,用flag数组保证了数字不会重复,避免每次产生的随机数都要遍历一遍数组以避免重复的问题。
而且通过时间作为种子,避免每次的随机数都一样!

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int aim[4],flag[10]={0};
srand(time(NULL));
for(int i=0;i<4;i++)
{
int temp = rand()%10;
if(flag[temp]==0)
{
aim[i]=temp;
flag[temp]=1;
}
else
i--;
}
for(i=0;i<4;i++)
printf("%d ",aim[i]);
printf("\n");
getchar();
}
printf
第2个回答  2008-04-14
int nums[10] = {0,1,2,3,4,5,6,7,8,9};
for (int i = 0; i < 4; ++i)
{
__int ret = my_rand(0, 9 - i);
__if (nums[ret] != nums[9 - i])
__{
_____int buf = nums[ret];
_____nums[ret] = nums[9 - i];
_____nums[9 - i] = buf;
__}
}

// nums最后四个元素为结果...
// my_rand(a, b)结果为[a,b]中的一个随机数,可以通过rand()来实现。
PS: 后面的数字要求与前面不重复本身就意味着它已经不是随机数了。
第3个回答  推荐于2016-11-09
#include <time.h>
int x[4];
int v = 10;

srand((unsigned)time(NULL));
x[0] = rand() % v ;

for (i=1;i<4;i++) {
Lab: x[i] = rand() % v ;
for (j=0;j<i;j++) { if (x[i] == x[j]) goto Lab;}
}

for(i=0;i<4;i++) printf("%d ",x[i]);本回答被提问者采纳
第4个回答  2008-04-13
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int getNum( int n )
{
return rand()%n;
}
int isrepeat( int* p, int n,int x )
{
for( int i = 0;i<n;++i )
{
if( *(p+i) == x )
return 1;
}
return 0;
}
int main()
{
srand( (unsigned)time(NULL) );

int a[4];
int n = 0;
int x = 0;
while( n < 4 )
{
x = getNum( 10 );
if( !isrepeat( a,n,x ) )
{
a[n] = x;
++n;
}
}

for( int i =0;i<4;++i )
{
printf("%d ",a[i]);
}

}
相似回答