在数组相关题目中,涉及到删除元素时我们通常想到的做法是找到被删除的元素的位置,然后将它后面的元素向前移动。

   在一些对数组元素要求不为0的题目中,我们可以使用以下方法,减少代码量:首先找到被删除的元素,将它置为零,然后在输出数组元素时将不为0的元素输出,从而达到了删除元素的效果。但是一定要注意题目对数组元素取值的规定,若题目规定数组元素可以为0,则此方法不合适。

下面是一个例题:

描述

输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。

输入描述:

输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。

输出描述:

输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。

#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
int a[1001];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(a[i]==a[j])
{
a[j]=0;
}
}
}
for(i=0;i<n;i++)
{
if(a[i]!=0)
printf("%d ",a[i]);
}

return 0;

}