13.给定含有 n 个整数的数组,要求对这个数组进行去重操作。所谓去重,是指对这个数组中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。 (1<n<20) (输入n个整数用空格隔开,输出去重后的数组 )用c语言编写
时间: 2024-10-11 20:09:46 浏览: 44
在 C 语言中,我们可以使用哈希表(也称为关联数组)来解决这个问题。这里提供一种简单的解决方案,利用数组的下标来表示元素第一次出现的位置:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 20
bool visited[MAX_SIZE] = {false}; // 哈希表,初始化所有元素为未访问
void removeDuplicates(int arr[], int n) {
for (int i = 0; i < n; i++) {
if (!visited[arr[i]]) {
printf("%d ", arr[i]); // 如果元素未访问过,打印并标记为已访问
visited[arr[i]] = true;
}
}
}
int main() {
int n, num;
printf("请输入数组长度(1到19): ");
scanf("%d", &n);
if (n < 1 || n > 20) {
printf("输入错误! 数组长度应在1到20之间.\n");
return 0;
}
printf("请输入 %d 个整数 (用空格隔开): ", n);
for (int i = 0; i < n; i++) {
scanf("%d", &num);
removeDuplicates(arr + i, n); // 使用指针遍历输入的数字
}
printf("\n去重后的数组: \n");
return 0;
}
```
这段代码首先读取用户输入的数组长度 `n` 和元素,然后调用 `removeDuplicates` 函数,仅打印数组中每个元素首次出现的位置。注意,此算法假设输入数组长度小于20,如果输入超出范围,程序会给出提示。
阅读全文