帮我用c语言实现一组无序重复数,经过两次循环,去掉重复的,只留下一个
时间: 2024-09-11 22:09:34 浏览: 30
在C语言中,可以通过使用数组来存储这组无序重复数,然后通过两次循环来去除重复的数。首先,第一次循环用于统计每个数出现的次数。第二次循环则遍历数组,只留下每个数第一次出现的位置,其他的则通过移位的方式覆盖掉。这种方法类似于桶排序的思想。
下面是一个简单的示例代码:
```c
#include <stdio.h>
void removeDuplicates(int arr[], int n) {
// 创建一个临时数组,用于存储每个数出现的次数
int temp[n];
for (int i = 0; i < n; i++) {
temp[i] = 0;
}
// 统计每个数出现的次数
for (int i = 0; i < n; i++) {
temp[arr[i]]++;
}
// 再次遍历原数组,只保留每个数第一次出现的位置
int k = 0;
for (int i = 0; i < n; i++) {
if (temp[arr[i]] == 1) {
arr[k++] = arr[i];
}
}
// 输出去重后的数组
printf("Array after removing duplicates: \n");
for (int i = 0; i < k; i++) {
printf("%d ", arr[i]);
}
}
int main() {
int arr[] = {4, 2, 2, 3, 3, 1, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
return 0;
}
```
这个程序会输出去重后的数组。需要注意的是,这种方法在数组中存在大量重复元素时可能效率不是很高,因为需要两次完整的数组遍历。