测试用例执行计划 - 华为OD统一考试(C卷)

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

某个产品当前迭代周期内有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

输出
3
4
1
2

image-20240217222555987

示例2

输入
3 3
3
1
5
1 2 3
1 2 3
1 2 3

输出
1
2
3

image-20240217222705104

题解

这是一个简单的模拟题,要求按照测试用例的优先级和ID进行排序,优先级高的用例先执行,如果优先级相同则按照ID升序排列。

解题思路:
  1. 首先读取输入,包括特性数量n、测试用例数量m,以及每个特性的优先级和每个测试用例所覆盖的特性。
  2. 将特性优先级存储在一个映射(Map)中,以特性ID作为键,优先级作为值。
  3. 计算每个测试用例的优先级,即将测试用例覆盖的特性的优先级求和。
  4. 将测试用例的优先级和ID存储在一个二维数组或者二元组中,并按照优先级降序、ID升序的顺序进行排序。
  5. 输出排序后的测试用例ID。

Java

import java.util.*;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取输入的 n 和 m
        int n = in.nextInt(), m = in.nextInt();

        // 特性优先级 {特性id: 特性优先级}
        Map<Integer, Integer> futurePriority = new HashMap<>();
        for (int id = 1; id <= n; id++) {
            futurePriority.put(id, in.nextInt());
        }
        in.nextLine();

        // 测试用例: (测试用例优先级, 测试用例id)
        List<int[]> testCases = new ArrayList<>();
        for (int id = 1; id <= m; id++) {
            int testCasePriority = Arrays.stream(in.nextLine().split(" "))
                    .mapToInt(f -> futurePriority.get(Integer.parseInt(f))).sum();
            testCases.add(new int[]{testCasePriority, id});
        }

        // 按照测试用例优先级和id排序
        Collections.sort(testCases, (o1, o2) -> {
            if (o1[0] == o2[0]) {
                return o1[1] - o2[1];
            } else {
                return o2[0] - o1[0];
            }
        });

        // 输出结果
        for (int[] testCase : testCases) {
            System.out.println(testCase[1]);
        }
    }
}

Python

n, m = map(int, input().split())

# 特性优先级 {特性id: 特性优先级}
future_priority = {}
for id in range(1, n + 1):
    future_priority[id] = int(input())

# 测试用例: (测试用例优先级, 测试用例id)
test_cases = []
for id in range(1, m + 1):
    test_case_priority = 0
    for f in list(map(int, input().split())):
        test_case_priority += future_priority[f]
    test_cases.append((-test_case_priority, id))

# 按照测试用例优先级 和 id 排序
test_cases.sort()

for test_case_priority, id in test_cases:
    print(id)

C++

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

int main() {
    // 读取输入的 n 和 m
    int n, m;
    cin >> n >> m;

    // 特性优先级 {特性id: 特性优先级}
    map<int, int> futurePriority;
    for (int id = 1; id <= n; id++) {
        cin >> futurePriority[id];
    }

    // 测试用例: (测试用例优先级, 测试用例id)
    vector<pair<int, int>> testCases;
    for (int id = 1; id <= m; id++) {
        int testCasePriority = 0;
        int feature;
        while(cin >> feature) {
            testCasePriority += futurePriority[feature];
            if(cin.peek() != ' ') break;
        }

        testCases.push_back({-testCasePriority, id});
    }

    // 按照测试用例优先级和id排序
    sort(testCases.begin(), testCases.end());

    // 输出结果
    for (const auto& testCase : testCases) {
        cout << testCase.second << endl;
    }

    return 0;
}

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392647.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python六级考试笔记

Python六级考试笔记【源源老师】 六级标准 一、 掌握文件操作及数据格式化。 二、 掌握数据可视化操作。 三、 理解类与对象的概念&#xff0c;初步掌握类与对象的使用。 四、 掌握SQLite数据库基础编程。 五、 掌握简单的使用tkinter的GUI设计。 ​ 1. 文件操作 &#xff0…

海外网红营销指南:打造情感共鸣的6大策略解析

随着全球互联网的发展&#xff0c;海外网红营销已经成为品牌推广的一种重要方式。然而&#xff0c;在竞争激烈的市场中&#xff0c;要让品牌在海外市场脱颖而出&#xff0c;仅仅依靠产品本身的特点和广告的宣传已经不再足够。情感共鸣&#xff0c;作为一种更为深刻、更为有力的…

春节专题|产业7问:区块链厂商的现在和未来——数字资产厂商

2023转瞬即逝&#xff0c;不同于加密领域沉寂一整年后在年末集中爆发&#xff0c;对于我国的区块链厂商而言&#xff0c;稳中求胜才是关键词&#xff0c;在平稳发展的基调下&#xff0c;产业洗牌也悄无声息的到来。 从产业总体而言&#xff0c;在经过了接近3年的快速发展后&…

『运维备忘录』之 CMD 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

C高级D5作业

1.#!/bin/bash read -p "请输入一个字符>>" -n 1 c echo case $c in [[:lower:]]) echo "小写" ;; [[:upper:]]) echo "大写" ;; [1-9]) echo "数字" ;; …

使用Python生成二维码的完整指南

无边落木萧萧下&#xff0c;不如跟着可莉一起游~ 可莉将这篇博客收录在了&#xff1a;《Python》 可莉推荐的优质博主首页&#xff1a;Kevin ’ s blog 本文将介绍如何使用Python中的qrcode库来生成二维码。通过简单的代码示例和详细解释&#xff0c;读者将学习如何在Python中轻…

第五次作业:LMDeploy 的量化和部署

参考文档&#xff1a;https://github.com/InternLM/tutorial/blob/main/lmdeploy/lmdeploy.md 基础作业&#xff1a; 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型&#xff0c;生成 300 字的小故事&#xff08;需截图&#xff09; …

Leetcode-589. N 叉树的前序遍历

题目&#xff1a; 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,null,3,2,4,…

【机器学习】机器学习常见算法详解第4篇:KNN算法计算过程(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习&#xff0c;伴随浅显易懂的数学知识&#xff0c;让大家掌握机器学习常见算法原理&#xff0c;应用Scikit-learn实现机器学习算法的应用&#xff0…

Checklist系列:JVM自检四十问,万字整理,推荐收藏

基础 请简单的介绍一下jvm&#xff1f; JVM 全称&#xff1a;Java Virtual Machine&#xff08;Java虚拟机&#xff09;简介&#xff1a;JVM是一种虚拟机&#xff0c;它使计算机能够运行Java程序以及用其他语言编写并编译为Java字节码的程序。Java的设计理念之一是"一次编…

桌面文件删除了怎么恢复?恢复文件,3个小秘诀!

在日常使用电脑的过程中&#xff0c;很多用户会习惯性的将文件保存在电脑桌面上。因此不可避免会出现桌面文件丢失的情况。这或许会对我们的工作和学习造成影响。 桌面文件删除了怎么恢复&#xff1f;如果你还没有掌握正确的恢复方法。记得继续往下看&#xff0c;下文有实用的…

C语言—数组一维(含冒泡排序)

1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b; /*1.用数组存储10个整型数&#xff0c;通过键盘输入一个数&#xff0c;找出该数在数组中的下标值&#xff1b;*/#include <stdio.h>int main(void) {int nums[…

C图书信息管理系统 代码+报告

C图书信息管理系统 背景&#xff1a; 在当今信息时代&#xff0c;图书信息管理系统成为图书馆和书店等组织中不可或缺的一部分。随着图书数量的增加和信息化水平的提高&#xff0c;传统的手工管理方式已经无法满足快速、高效、精确的信息管理需求。因此&#xff0c;设计和实现一…

【STM32 物联网】AT指令的介绍

文章目录 前言一、什么是AT指令二、使用AT指令需要注意什么 三、AT指令的分类和提示信息3.1 AT指令的分类3.2 是否保存到Flash的含义3.3 提示信息 总结 前言 本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网&#xff08;IoT&#xff09;应用中&#xff0c;通信模…

为何 Serverless 革命停滞不前(译)

原文&#xff1a;Bernard Brode - 2020.10.12 主要观点 近几年来&#xff0c;有人预测 Serverless 计算将带来一种全新的计算时代&#xff0c;这种时代的应用程序无需操作系统即可运行。我们被告知这种框架将解决许多可扩展性问题。然而&#xff0c;现实并非如此。尽管许多人…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…

Sora爆火,普通人的10个赚钱机会

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

python-产品篇-游戏-成语填填乐

文章目录 准备代码效果 准备 无需其他文件&#xff0c;复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…

Java集合篇之深入解析LinkedList

写在开头 作为ArrayList的同门师兄弟&#xff0c;LinkedList的师门地位逊色不少&#xff0c;除了在做算法题的时候我们会用到它之外&#xff0c;在实际的开发工作中我们极少使用它&#xff0c;就连它的创造者都说&#xff1a;“I wrote it&#xff0c;and I never use it”&am…

ESP32-Cam学习(1)——拍摄第一张照片

1.开发板介绍 使用的ESP32-Cam实物图为&#xff1a; 在某宝可以轻易买到。它分为主板&#xff0c;和底板。底板的主要功能是供电、程序下载等等。主板才是ESP32芯片的核心。 2.固件烧录 使用摄像头之前&#xff0c;需要给ESP32刷入支持摄像头的固件库&#xff0c;其下载地址为…