题解 | #序列中整数去重#
有序序列判断
http://www.nowcoder.com/practice/22e87f8a8d764a6582710f38d1b40c6e
#include<stdio.h> int main() { int n, i, j, flag = 1;//输出标签,当flag=1时才输出 scanf("%d", &n); int a[1000 for (i = 0; i < n; i++) { scanf("%d", &a[i]); for (j = 0; j < i; j++) //(j=0;j<n;j++0)感觉这样才对啊,前面那种写法,最后一个数字都没比较?但我们这里是一种新的比较方式,有点难想多调试 { if (a[i] == a[j]) { flag = 0;//输入的数字和前面的数字进行比较看是否重叠 break; } } if (flag)//flag=1时进行输出 printf("%d ", a[i]); flag = 1; } return 0; }
其实作为小白的我,开始不是这样写的, 我是用大多人的传统思维,即定义一个数组来存我们输入的整数序列,然后进行去重,首先第一轮比较找到第一个整数,依次和它后面的元素进行比较,找到重复的把它赋值为非我们输入的元素,如0。之后进行第二轮比较,找到第二个元素,第二个元素再和它后面的元素进行去重比较.........,之后一个for循环进行限制输出即可。之后我看到其他用户提交的这个代码,看了很久不是很了解,之后调试下终于明白了,在此简单的分析下思路:
其实就是通过循环,外层循环控制输入的新数字,内层控制比较,从第一个元素开始比较,你每输入的一个新数字要和你前面的数比较,不重复才通过条件flag=1输出,只要前面有一次重复,就跳出比较,开始输入第二新个数字。多多调试下就知道。