蓝桥杯历届试题:错误票据

过程:
1、处理输入问题。发现直接scanf就可以了,而且给出的N行并没有用。
2、判断条件。两个if语句,发现错误67%。
3、稍微更改一下判断条件,正确。
关键: 注意第一个判断条件不能用 **if(a[j]!=a[j+1]-1)**来找断号,因为如果前后两个数字相同的话也满足这个条件,那么断号就被重号代替了。

代码1(有67%错误):

#include<iostream>
#include<algorithm>
using namespace std;
int a[10005];
int main() {
	int n,i=0,len=0;
	int num1=0,num2=0;
	scanf("%d",&n);
	while(scanf("%d",&a[i])!=EOF) {   //一直输入到文本结束,ctrl+Z;
		i++;
		len++;
	}
	sort(a,a+len);
	for(int j=0; j<len-1; j++) {
		if(a[j]!=a[j+1]-1) {   //找断号
			num1=a[j]+1;
		}
		if(a[j]==a[j+1]) {   //找重号
			num2=a[j];
		}
	}
	printf("%d %d",num1,num2);
	return 0;
}

代码2(正确),只需改一下判断条件即可:

#include<iostream>
#include<algorithm>
using namespace std;
int a[10005];
int main() {
	int n,i=0,len=0;
	int num1=0,num2=0;
	scanf("%d",&n);
	while(scanf("%d",&a[i])!=EOF) {   //一直输入到文本结束,ctrl+Z;
		i++;
		len++;
	}
	sort(a,a+len);
	for(int j=0; j<len-1; j++) {
		if(a[j]==a[j+1]-2) {   //找断号
			num1=a[j]+1;
		}
		if(a[j]==a[j+1]) {   //找重号
			num2=a[j];
		}
	}
	printf("%d %d",num1,num2);
	return 0;
}
发布了13 篇原创文章 · 获赞 0 · 访问量 1001

猜你喜欢

转载自blog.csdn.net/qq_42595835/article/details/104089396