华为OD机试 - 测试用例执行计划(Java 2024 C卷 100分)

发布于:2024-05-14 ⋅ 阅读:(146) ⋅ 点赞:(0)

在这里插入图片描述

华为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在线答疑。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到