(来自 牛客网 编程初学者入门训练)
1.问题:
(链接呈上:序列中整数去重)
描述
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
示例1
输入:
5 10 12 93 12 75输出:
10 12 93 75
2.代码:
#include<stdio.h>
int main()
{
int n = 0;
int num[1000] = { 0 };
//printf("请输入任意一个整数n:");
scanf("%d", &n);
if ((n >= 1) && (n <= 1000))
{
//printf("请输入%d个整数(空格分开):",n);
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &num[i]);
}
//printf("去重后结果为:");
for (i = 0; i < n; i++)
{
int j = 0;
for (j = (i + 1); j < n; j++)//注意对比1从后一个开始对比,避免重复对比
{
if (num[i] == num[j])
{
num[j] = 0;
//将重复的设为0 因为实际输入一定不会出现0 彼时将==0的不输出即可
}
}
if (num[i] != 0)
{
printf("%d ", num[i]);
}
}
}
return 0;
}
3.注意点:注意代码中的标记部分
1)主要自己的错误会发生在:只会对重复的数字进行一次删除 多次出现数字等
(见:Gitee0903)
2)注意题给条件,可以将重复的标识为0;
3)注意在比较时,为了避免重复,直接将比较对象从后一个开始!!