私信TA

用户名:2950870451

访问量:24067

签 名:

等  级
排  名 202
经  验 6406
参赛次数 0
文章发表 77
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

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

10 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区

这里==1,如果是重号导致的断号,那断号n就一直是0了,改个>=好像就行了(菜狗头保命)
2023-01-16 15:01:24
所以这个while是不是有问题啊,看到另一个人也这样写的,不懂,求解!!!
2022-06-05 00:47:28
之前也想到了直接无视N行,就是没想到scanf结束循环的条件
2021-04-14 15:17:42
说的不对的地方,小渣渣望各位大佬们指教qwq
2019-01-27 21:04:02
  • «
  • 1
  • »