Description
给定含有n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。
Input
输入一个整数n,表示序列有n个整数(0<n<=100000)
接下来输入n个整数,表示序列中的数,这些数在[0,100000]区间内。
Output
按照输入的顺序输出去重后的序列,整数之间用空格隔开。
Sample Input
8
1 2 4 3 1 2 4 3
Sample Output
1 2 4 3
#include<stdio.h>
int main()
{
int n,i,j,k,max=-1;;
while(scanf("%d",&n)!=EOF)
{
max=-1;
int a[100001],b[100005];
for(i=0;i<=n-1;i++)
{
scanf("%d",&a[i]);
if(a[i]>max) max=a[i];
}
printf("%d",a[0]);
b[a[0]]=-1;
for(k=1;k<=n-1;k++)
{
if(b[a[k]]==0)
{
printf(" %d",a[k]);
b[a[k]]=-1;
}
}
printf("\n");
}
return 0;
}
以上代码提交后显示错误
数组 b[] 没有初始化,修改如下,供参考:
#include<stdio.h>
int main()
{
int n,i,j,k; //max=-1;
//while(scanf("%d",&n)!=EOF)
//{
//max=-1;
int a[100001] = {0}, b[100005] = {0}; //修改
scanf("%d", &n);
for(i=0;i<=n-1;i++)
{
scanf("%d",&a[i]);
//if(a[i]>max) max=a[i];
}
printf("%d",a[0]);
b[a[0]] = -1;
for(k=1;k<=n-1;k++)
{
if(b[a[k]] == 0)
{
printf(" %d",a[k]);
b[a[k]]=-1;
}
}
printf("\n");
//}
return 0;
}
max多余吧。
输入的数存放在a数组,然后遍历a,对于a中每一个数到b数组中找一下是否存在,存在则取a中下一个元素,不存在则将这个数存入b数组,a遍历完,输出b
while(scanf("%d",&n)!=EOF)
目测只有一组数据
那么不要循环
scanf("%d",&n);
即可