在C语言中,可以使用rand()函数生成随机数,但是要生成不重复的随机数,可以采用以下方法:
- 使用数组存储已经生成的随机数,每次生成新的随机数时,先检查数组中是否已经存在该随机数,如果存在则重新生成,直到生成一个不重复的随机数。
#include#include #include int main() { int nums[10]; // 存储生成的随机数 int index = 0; srand((unsigned)time(NULL)); // 初始化随机数种子 while (index < 10) { int new_num = rand() % 100; // 生成0~99的随机数 // 检查数组中是否已经存在该随机数 int i; int is_duplicate = 0; for (i = 0; i < index; i++) { if (nums[i] == new_num) { is_duplicate = 1; break; } } if (!is_duplicate) { nums[index] = new_num; index++; } } // 输出生成的不重复随机数 for (int i = 0; i < 10; i++) { printf("%d ", nums[i]); } return 0; }
- 可以使用洗牌算法(Fisher–Yates shuffle)生成一个随机排列,然后取前n个元素作为不重复的随机数。
#include#include #include void shuffleArray(int arr[], int n) { srand((unsigned)time(NULL)); for (int i = n - 1; i > 0; i--) { int j = rand() % (i + 1); int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int main() { int nums[10]; // 存储生成的随机数 for (int i = 0; i < 10; i++) { nums[i] = i; } shuffleArray(nums, 10); // 输出生成的不重复随机数 for (int i = 0; i < 10; i++) { printf("%d ", nums[i]); } return 0; }
以上是两种生成不重复的随机数的方法,可以根据实际需求选择合适的方法。