题目描述:
输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。
输入描述:
输入包含两行,第一行包含一个正整数n(1<=n<=1000),表示第二行序列中数字的个数;<br /> 第二行包含n个整数(范围1~5000),用空格分隔。
输出描述:
输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。
具体实现:
#include <stdio.h>
int main()
{
int n = 0 ;
scanf("%d",&n); //第一个输出
//定义一个数组,把数值存到里面。
int arr[1000] = {0};
int i = 0;
for (i = 0; i < n; i++) //第二个输入
{
scanf("%d",&arr[i]);
}
//去重
for (i = 0; i < n; i++) //n个数字的比较
{
//判断arr[i]是否在后面出现,从i+1开始
for (int j = i+1; j < n; j++) //一组数字的比较
{
if (arr[i] == arr[j])
{
/*满足条件后,去重-后面的元素往前移位覆盖。
k < n然后下面arr[k+1],考虑到数组会越界,所以写成n-1*/
for (int k = j; k < n-1; k++)
{
arr[k] = arr[k+1];
}
n--; //删掉一个元素
j--;
}
}
}
//输出
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
输出结果:
总结:
拿一个数,与它后面所有的数都比较一遍,如果它后面的数有与它相同的,那就把后面的数往前移,把相同的哪个数给覆盖掉。这个就是这道题的思路