c语言编程怎么不重复随机数

时间:2025-01-28 16:39:53 网络游戏

在C语言中生成不重复的随机数,可以通过以下几种方法实现:

方法一:使用数组存储已生成的随机数

1. 声明一个数组用于存储已生成的随机数。

2. 使用循环生成随机数,并判断该随机数是否已存在于数组中。

3. 若随机数不存在于数组中,则将其添加到数组中;否则重新生成随机数。

4. 重复上述步骤直到生成足够数量的不重复随机数。

方法二:使用洗牌算法(Fisher–Yates)

1. 创建一个数组来存储所有可能的随机数。

2. 使用循环遍历数组,对于每个位置,从剩余未使用的数字中随机选择一个数字,并将其放到当前位置。

3. 重复上述步骤直到所有位置都填满。

方法三:双数组法

1. 创建两个数组,一个用于存储随机数,另一个用于记录随机数是否已经存在。

2. 使用循环生成随机数,并检查该随机数是否已存在于记录数组中。

3. 若随机数不存在于记录数组中,则将其添加到随机数数组中,并在记录数组中标记为已存在。

4. 重复上述步骤直到生成足够数量的不重复随机数。

示例代码

```c

include

include

include

define MAX_NUM 10 // 生成的随机数个数

define MAX_RANGE 100 // 随机数的范围

int main() {

int random_nums[MAX_NUM]; // 用于存储随机数的数组

int i, j, num;

srand((unsigned) time(NULL)); // 设置随机数种子为当前时间

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

do {

num = rand() % MAX_RANGE + 1; // 生成随机数

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

if (num == random_nums[j]) {

break; // 若随机数已存在于数组中,则重新生成

}

}

} while (j < i);

random_nums[i] = num; // 将生成的随机数添加到数组中

}

// 输出生成的不重复随机数

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

printf("%d ", random_nums[i]);

}

printf("\n");

return 0;

}

```

建议

种子设置:使用当前时间作为随机数种子,确保每次运行程序时生成的随机数序列不同。

数组大小:确保数组大小足够大,以存储所有可能的随机数,避免数组越界。

性能优化:对于大范围随机数生成,可以考虑使用更高效的算法,如洗牌算法(Fisher–Yates),以降低时间复杂度。