解题思路:





注意事项:

注意输入完N,要清楚多于字符。



参考代码:

#include<stdio.h>
#include<string.h>
int main()
{
	int N=0,m,n,i,j=0,k,b[100],sum,len;
	char a[10000];
	scanf("%d",&N);
	gets(a);
	for(i=0;i<N;i++)
	{
		gets(a);
		sum=0;
		len=strlen(a);
		a[len]=' '; //下面循环遇到空格才会将字符数字转换成整形存入数组b,末尾加空格键防止行末直接是换行符
		for(k=0;k<len+1;k++)
		{
			if(a[k]==' ')
			{
				if(sum>0)
				{
					b[j++]=sum;
				}
				sum=0;
			}
			else
			{
				sum=sum*10+(a[k]-'0');
			}
		}
	}
	for(i=1;i<j;i++) //冒泡排序
	{
		for(k=0;k<j-i;k++)
		{
			if(b[k]>b[k+1])
			{
				sum=b[k];
				b[k]=b[k+1];
				b[k+1]=sum;
			}
			else if(b[k]==b[k+1]) n=b[k]; //重号
		}
	}
	for(k=0;k<j-1;k++)
	{
		if(b[k+1]-b[k]==2)
		{
			m=b[k]+1;
			break;
		}
	}
	printf("%d %d\n",m,n);
	return 0;
}


点赞(1)
 

0.0分

8 人评分

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

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

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

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

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

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

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

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

评论列表 共有 4 条评论

坚果 1年前 回复TA
这个if(sum>0),是因为输入可能是负数,但题目说ID 是正整数,所以是用来去除输入的负数吗?
坚果 1年前 回复TA
循环上面的gets(a),可以不用,将scanf(“%d”,&N);改为scanf("%d\n",&N)就行了吧,这样换行符就已经被读走了
Luftmensch 2年前 回复TA
求助,作者第十五行语句 for(k=0;k<len+1;k++),如果把len改为strlen(a)就会报错,为什么啊/(ㄒoㄒ)/~~
辣椒不要辣 6年前 回复TA
学习了。