原题链接:蓝桥杯2013年第四届真题-错误票据
解题思路:
采用的是计数排序的算法,先创建一个最大数量的数组记录出现个数,再判断出现0和2所对应的下标数,即为断号和重号。
判断0时,要判断当前数组值为0并且其前一项数组值不为0,这样才能保证该下标在票面范围内。
每轮结束时,判断是否已经确定a,b的值(断号和重号),即可退出循环。
参考代码:
import java.util.*; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); int n=input.nextInt(); input.nextLine(); long[] arr=new long[100000]; for(int i=0;i<n;i++) { Scanner sc=new Scanner(input.nextLine()); while(sc.hasNext()) { int num=sc.nextInt(); arr[num]++; } } int a=0,b=0; for(int i=2;i<100000;i++) { if(arr[i]==0 && arr[i-1]!=0) a=i; if(arr[i]==2) b=i; if(a!=0 && b!=0) break; } System.out.println(a+" "+b); } }
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复