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

2024-10-29 06:17:30
推荐回答(4个)
回答1:

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

#include
#include
#include
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:

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:

#include
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}

for(i=0;i<4;i++) printf("%d ",x[i]);

回答4:

#include
#include
#include

int getNum( int n )
{
return rand()%n;
}
int isrepeat( int* p, int n,int x )
{
for( int i = 0;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]);
}

}