原题链接:蓝桥杯2013年第四届真题-错误票据
思路:排序,判断每两个数之间的差值是否为2,若为2则这两个数之间的数就是断号ID,否则就没有,重号ID就是出现次数>1的数。
自己错误的原因:提交WA了好多次,再加上看了大佬们的思路,才发现自己之前一直把断号ID给理解错了,错在哪呢,看例子:就拿1和4说吧,我自己想的是1和4之间差2和3,所以断号ID是2和3。可惜这么想是错的,因为题目中已经说到断号ID为一个,而在这个例子中则出现了两个,所以1和4之间没有断号,即使有那也是建立在题目条件中有提到"可能存在多个断号ID"的情况下。
注意事项:可以忽略行数N,直接把所有数据全放到数组就行
参考代码:
#include <stdio.h> int main(){ int a[100001] = {0}; int n,m,num,max,min; int i; n = m = max = 0; min = 0x7fffffff; scanf("%d", &num); while(~scanf("%d", &num)){ if(max < num) max = num; if(min > num) min = num; a[num]++; } for(i = min+1; i <= max; i++){ if(a[i-1] == 1){ if(a[i] == 0 && a[i+1] == 1) n = i; } } for(i = min; i <= max; i++) if(a[i] > 1) m = i; printf("%d %d", n,m); return 0; }
0.0分
6 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复