华为OD机试 2024C卷题库疯狂收录中,刷题点这里
专栏导读
本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。
一、题目描述
某个产品当前迭代周期内有N个特性(F1, F2, …, FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其ID作为下标进行标识。
设计了M个测试用例(T1, T2,…,TM),每个用例对应了一个覆盖特性的集合,测试用例使用其ID作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。
在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例ID小的先执行。
二、输入描述
第一行输入为N和M,N表示特性的数量,M表示测试用例的数量。
之后N行表示特性ID=1到特性ID=N的优先级。
再接下来M行表示测试用例ID=1到测试用例ID=M关联的特性的ID的列表。
三、输出描述
按照执行顺序(优先级从大到小)输出测试用例的ID,每行一个ID。
1、输入
5 4
1
1
2
3
5
1 2 3
1 4
3 4 5
2 3 4
2、输出
3
4
1
2
3、说明
四、解题思路
1、读取输入数据:
首先获取特性的数量 N 和测试用例的数量 M。
接着读取 N 个整数,分别代表每个特性的优先级,存储在数组 featurePriorities 中。
然后读取 M 行数据,每行描述一个测试用例覆盖的特性 ID 列表,存储在列表中。
2、计算测试用例优先级:
对于每个测试用例,根据其覆盖的特性 ID 列表,计算总的优先级。总优先级是该测试用例覆盖的所有特性的优先级之和。
使用数组或集合来存储每个测试用例的优先级和其 ID。
3、排序和输出:
对测试用例按照优先级降序进行排序,若优先级相同,则按照 ID 升序排序。
输出排序后的测试用例 ID。
五、Java算法源码
public class OdTest01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int N = scanner.nextInt(); // 读取特性的数量int M = scanner.nextInt(); // 读取测试用例的数量int[] featurePriorities = new int[N + 1]; // 特性优先级数组,下标从1开始for (int i = 1; i <= N; i++) {featurePriorities[i] = scanner.nextInt(); // 读取每个特性的优先级}List<TestCase> testCases = new ArrayList<>();scanner.nextLine(); // 移动到下一行开始读取用例数据for (int i = 1; i <= M; i++) {String line = scanner.nextLine();String[] features = line.split(" ");int prioritySum = 0;for (String feature : features) {int featureId = Integer.parseInt(feature);prioritySum += featurePriorities[featureId]; // 计算当前测试用例的总优先级}testCases.add(new TestCase(i, prioritySum)); // 存储测试用例ID和其优先级}// 根据优先级降序,ID升序排序Collections.sort(testCases, (a, b) -> {if (b.priority != a.priority) {return b.priority - a.priority; // 优先级高的先} else {return a.id - b.id; // ID小的先}});// 输出结果for (TestCase tc : testCases) {System.out.println(tc.id);}scanner.close();}// 定义测试用例类static class TestCase {int id;int priority;TestCase(int id, int priority) {this.id = id;this.priority = priority;}}
}
六、效果展示
1、输入
3 3
3
1
5
1 2 3
1 2 3
1 2 3
2、输出
1
2
3
3、说明
🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷+C卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。