c语音生成随机数不重复
时间: 2023-07-28 12:07:03 浏览: 148
要生成不重复的随机数序列,可以使用洗牌算法(Fisher-Yates算法)。具体步骤如下:
1. 定义一个数组来存储需要生成的随机数序列。
2. 对数组进行初始化,将数组元素赋值为对应的下标。
3. 从数组末尾开始,每次随机选择一个位置,将该位置的元素与数组末尾的元素交换。
4. 数组末尾的元素已经生成,将指针指向数组前面一个位置,重复步骤 3,直到数组的第一个元素也生成。
这样生成的随机数序列不仅不重复,而且随机性好,具有较高的统计特性。
下面是使用C语言实现洗牌算法的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10 // 随机数序列长度
void shuffle(int arr[], int n);
int main()
{
int arr[N];
int i;
// 初始化数组
for (i = 0; i < N; i++) {
arr[i] = i;
}
// 随机打乱数组
shuffle(arr, N);
// 输出生成的随机数序列
printf("Random sequence: ");
for (i = 0; i < N; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
void shuffle(int arr[], int n)
{
int i, j, tmp;
srand(time(NULL)); // 初始化随机数种子
for (i = n-1; i > 0; i--) {
// 随机选择一个位置
j = rand() % (i+1);
// 交换该位置的元素与数组末尾的元素
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
```
阅读全文