思路:排序,判断每两个数之间的差值是否为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.0分

6 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

璇火16 2年前 回复TA
这里==1,如果是重号导致的断号,那断号n就一直是0了,改个>=好像就行了(菜狗头保命)
偷菜的小孩 2年前 回复TA
@偷菜的小孩 抱歉,打个 ctrl Z就行了,第一次遇见可以这样
偷菜的小孩 2年前 回复TA
所以这个while是不是有问题啊,看到另一个人也这样写的,不懂,求解!!!
Kennedy扬 3年前 回复TA
@没人要的阿豪 对啊他这个是不是卡在循环里出不来啊
没人要的阿豪 3年前 回复TA
之前也想到了直接无视N行,就是没想到scanf结束循环的条件
6年前 回复TA
说的不对的地方,小渣渣望各位大佬们指教qwq