设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)

时间:2022-11-05 17:04:56
#import <Foundation/Foundation.h>

#pragma mark -- 设计一个算法,要求在20个数字中(0到19)随机选取十个数字,但是这十个数字不能重复(用C语言或者OC实现)

//思路:随机产生十个数,使用数组存储,将新产生的随机数同之前的随机数进行比较。如果前面已经产生相同的随机数,那么重新赋值,直到产生不同的随机数为止。(需要定义标记位来判断)


int compareOfNumbers(int array[],int n, int m)
{
int flag = 1;
for (int i = 0 ; i < m ; i ++) {
//如果产生的随机数跟之前的数有重复的,置 flag 为 0;
if (array[i] == n) {
flag = 0;
}
}
return flag; //返回flag的值。
}

void radomOfTenNumbers()
{
int array[20];
int flag = 0; //定义标记,区别元素相同的情况。
for (int i = 0 ; i < 10 ; i ++) {
//方法一: 使用goto语句
// loop:array[i] = arc4random() % 20 ; //随机产生一个0--19之间的数。
// flag = compareOfNumbers(array,array[i],i); //产生的随机数跟之前的数值进行比较。
// if (flag == 0) { //如果重复,重新生成一个随机数。
// goto loop; //goto 函数只能在一个函数中使用
// }
// else
// printf("%d ",array[i]);
//方法二:使用while语句。
array[i] = arc4random() % 20 ;
while ((flag = compareOfNumbers(array,array[i],i)) == 0) { //只要当前产生的随机数跟之前的随机数相同,重新产生新的随机数。
array[i] = arc4random() % 20 ; //重新赋值。
}
printf("%d ",array[i]); //输出产生的随机数。
}

printf("\n");
}