1.题目描述:
给定含有几个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
2.输入格式
输入包含两行:
第一行包含一个正整数 n(1 < n< 20000),表示第二行序列中数字的个数;第二行包含 几 个整数,整数之间以一个空格分开。每个整数大于等于 10 、小于等于 100.
3.输出格式
输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。
4.输入输出样例
输入1:
5
10 12 93 12 75
输出:
10 12 93 75
5.代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 100 // 最大数值
int main() {
int n;
scanf("%d", &n); // 读入数字个数
int *arr = (int *)malloc(n * sizeof(int)); // 动态分配数组
int *seen = (int *)calloc(MAX_NUM + 1, sizeof(int)); // 记录已出现的数字
// 读入数字
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 去重过程
for (int i = 0; i < n; i++) {
if (!seen[arr[i]]) { // 如果这个数字没有出现过
seen[arr[i]] = 1; // 标记为已出现
printf("%d ", arr[i]); // 输出这个数字
}
}
// 清理内存
free(arr);
free(seen);
return 0;
}