C语言如何保证生成的随机数不重复
时间: 2024-10-15 09:28:48 浏览: 40
在C语言中,生成不重复的随机整数通常需要结合数组或循环结构以及一些额外的策略。以下是使用`rand()`函数和种子值的一个常见方法:
1. 首先,你需要设置一个随机数种子,以初始化随机数生成器。可以使用`srand(time(NULL))`,这里的`time(NULL)`会获取当前时间作为种子,使得每次程序运行时生成的随机数序列不同。
2. 然后,为了从一个有限范围内生成不重复的随机数,你可以创建一个包含所有可能随机数的数组。例如,如果你想要生成0到n-1之间的整数,你可以创建一个大小为n的数组。然后,每次生成随机数时,检查该数是否已经在数组中,如果不在则添加并返回。
```c
#include <stdio.h>
#include <stdlib.h>
int* generate_random(int n) {
int* arr = malloc(n * sizeof(int));
for (int i = 0; i < n; ++i) {
arr[i] = i; // 初始化为0-n-1
do {
int random_index = rand() % n;
if (arr[random_index] == i) continue; // 如果随机索引对应的元素已存在,则继续尝试
arr[i] = arr[random_index];
arr[random_index] = i;
} while (arr[i] != i); // 当随机数未改变时跳出循环,表示找到了一个空位置
}
return arr;
}
// 使用示例
int main() {
srand(time(NULL));
int n = 10;
int* unique_randoms = generate_random(n);
for (int i = 0; i < n; ++i) {
printf("%d ", unique_randoms[i]);
}
free(unique_randoms);
return 0;
}
```
阅读全文