用C语言写出一个包含100个整型的随机数组,无重复值
时间: 2024-09-25 12:07:20 浏览: 30
在C语言中,由于标准库提供的功能有限,我们需要自定义一些函数来实现生成不重复的随机数组。以下是一个简单的示例,使用Fisher-Yates洗牌算法(也称为Knuth shuffle)来随机排列100个整数,确保它们不会重复:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 函数用于交换数组中的两个元素
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
// 使用Fisher-Yates算法生成不重复的随机数组
int* generate_unique_random_array(int size) {
int* arr = malloc(size * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
// 生成1到size的所有整数
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// 对数组进行随机排序
srand(time(NULL)); // 设置随机种子
for (int i = size - 1; i > 0; i--) {
int j = rand() % (i + 1); // 随机索引
swap(&arr[i], &arr[j]);
}
return arr;
}
int main() {
const int size = 100;
int* random_arr = generate_unique_random_array(size);
if (random_arr != NULL) {
printf("Random array with unique values:\n");
for (int i = 0; i < size; i++) {
printf("%d ", random_arr[i]);
}
free(random_arr); // 释放内存
printf("\n");
}
return 0;
}
```
注意:此代码并不能保证绝对的不重复,因为当数组大小非常大时,找到完全不重复的组合概率极低。但在实际应用中,对于100个元素来说,这种情况非常罕见。
阅读全文