华为OD机试统一考试D卷C卷 - 找出作弊的人
题目描述
公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。
过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,要求p1<p2
员工个数取值范国:O<n<100000
员工ID为整数,取值范围:0<=n<=100000
考试成绩为整数,取值范围:0<=score<=300
输入描述
员工的ID及考试分数
输出描述
分差最小的员工ID对(p1,p2)列表,要求p1<p2。每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工对中p1值大小升序排列(如果p1相同则p2升序)。
样例1
输入:
5 1 90 2 91 3 95 4 96 5 100
输出:
1 2 3 4
解释:
输入:第一行为员工个数n,后续的n行第一个数值为员工ID,第二个数值为员工考试分数
输出:员工1和员工2的分差为1,员工3和员工4的分差也为1,因此最终结果为
1 2
3 4
样例2
输入:
5 1 90 2 91 3 92 4 85 5 86
输出:
1 2 2 3 4 5
Java
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { // 创建Scanner对象,用于从控制台读取数据 Scanner scanner = new Scanner(System.in); // 读取员工个数n int n = scanner.nextInt(); // 创建一个List来存储员工的ID和分数,每个员工的信息存储在一个长度为2的int数组中 List<int[]> scoreList = new ArrayList<>(); for (int i = 0; i < n; i++) { // 对于每个员工,读取他们的ID和分数,并将它们作为一个数组添加到scoreList中 scoreList.add(new int[]{scanner.nextInt(), scanner.nextInt()}); } // 关闭Scanner对象 scanner.close(); //
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
机试E卷D卷刷题日记 文章被收录于专栏
机试刷题记录