随机生成1到40数字,且不能重复,使用C语言
时间: 2023-10-26 09:07:16 浏览: 327
C++编写生成不重复的随机数代码
5星 · 资源好评率100%
好的,以下是使用 C 语言实现的随机生成 1 到 40 的不重复数字的方法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_NUM 40
int main() {
int nums[MAX_NUM]; // 存放数字的数组
int i, j, tmp;
// 初始化数组
for (i = 0; i < MAX_NUM; i++) {
nums[i] = i + 1;
}
// 通过随机交换数组元素的方式打乱数组
srand(time(NULL)); // 初始化随机种子
for (i = 0; i < MAX_NUM; i++) {
// 生成随机下标 j
j = rand() % MAX_NUM;
// 交换 nums[i] 和 nums[j] 的值
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
// 输出前十个数字
printf("随机生成的前十个数字为:\n");
for (i = 0; i < 10; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```
这里我们使用了 Fisher–Yates 洗牌算法(也称为 Knuth 洗牌算法)来打乱数组顺序。该算法的基本思路是从数组末尾开始,每次随机选择一个之前未被选中的元素,将其与当前位置的元素交换位置,直到遍历完整个数组。
通过这种方式,我们可以生成一个随机的、不重复的、包含 1 到 40 的数字的数组。程序运行多次可以生成不同的结果。
阅读全文