用C语言 给一个数组数据: n个元素,每个元素数值的范围在0~-n-1之间。判断数据有无重复出现,若重复出现则报错
时间: 2024-02-28 20:56:41 浏览: 108
可以使用桶排序(Bucket Sort)的思想来解决该问题。具体步骤如下:
1. 首先定义一个长度为 n 的桶数组 bucket,将它所有元素初始化为0。
2. 遍历数组,对于每个元素 a[i],将 bucket[a[i]] 的值加 1。
3. 再次遍历数组,对于每个元素 a[i],检查 bucket[a[i]] 是否大于 1。如果是,表示 a[i] 重复出现,输出错误信息并结束程序;如果不是,则继续遍历。
4. 如果遍历结束后都没有发现重复元素,则表示数据没有问题,输出正确信息即可。
下面是 C 语言的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
void check_duplicate(int a[], int n) {
int bucket[MAX_N] = {0}; // 初始化桶数组
int i;
// 遍历数组,统计每个元素出现的次数
for (i = 0; i < n; i++) {
bucket[a[i]]++;
}
// 再次遍历数组,检查是否有重复元素
for (i = 0; i < n; i++) {
if (bucket[a[i]] > 1) {
printf("Duplicate element found: %d\n", a[i]);
exit(1);
}
}
// 如果程序能执行到这里,表示数据没有问题
printf("Data is valid.\n");
}
int main() {
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 测试数据,没有重复元素
int b[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 0}; // 测试数据,有重复元素
check_duplicate(a, 10); // 输出 Data is valid.
check_duplicate(b, 10); // 输出 Duplicate element found: 0
return 0;
}
```
注意,这里假设每个元素的值都在 0 ~ n-1 的范围内,因此桶数组的大小只需要开到 n,可以避免浪费空间。如果数据的范围不确定,可以考虑使用哈希表等数据结构来实现。
阅读全文