华为OD机试D卷C卷 - 测试用例执行计划(C++ Java JavaScript Python C语言)

本文介绍了华为OD机试中关于测试用例执行顺序的问题,重点在于如何根据特性优先级和测试用例覆盖的特性优先级之和来确定执行顺序。文章通过实例解析了优先级计算和排序规则,并提供了C++、Java、JavaScript和Python等语言的解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

某个产品当前迭代周期内有 N 个特性(F1,F2,…FN)需要进行覆盖测试,每个特性都被评估了对应的优先级,特性使用其 ID 作为下标进行标识。

设计了 M 个测试用例(T1,T2,…,TM),每个测试用例对应一个覆盖特性的集合,测试用例使用其 ID 作为下标进行标识,测试用例的优先级定义为其覆盖的特性的优先级之和。

在开展测试之前,需要制定测试用例的执行顺序,规则为:优先级大的用例先执行,如果存在优先级相同的用例,用例 ID 小的先执行。

输入描述

第一行输入为 N 和 M,

  • N 表示特性的数量,0 < N ≤ 100
  • M 表示测试用例的数量,0 < M ≤ 100

之后 N 行表示特性 ID=1 到特性 ID=N 的优先级,

再接下来 M 行表示测试用例 ID=1 到测试用例 ID=M 关联的特性的 ID 的列表。

输出描述

按照执行顺序(优先级从大到小)输出测试用例的 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

说明

测试用例的优先级计算如下:

T1 = Pf1 + Pf2 + Pf3 = 1 + 1 + 2 = 4
T2 = Pf1 + Pf4 = 1 + 3 = 4
T3 = Pf3 + Pf4 + Pf5 = 2 + 3 + 5 = 10
T4 = Pf2 + Pf3 + Pf4 = 1 + 2 + 3 = 6

按照优先级从小到大,以及相同优先级,ID小的先执行的规则,执行顺序为T3,T4,T1,T2

用例2

输入

3 3
3
1
5
1 2 3
1 2 3
1 2 3

输出

1
2
3

说明

测试用例的优先级计算如下:

T1 = Pf1 + Pf2 + Pf3 = 3 + 1 + 5 = 9
T2 = Pf1 + Pf2 + Pf3 = 3 + 1 + 5 = 9
T3 = Pf1 + Pf2 + Pf3 = 3 + 1 + 5 = 9

每个优先级一样,按照 ID 从小到大执行,执行顺序为T1,T2,T3

解题思路

这道题看懂题目就会做了!!!

用例1包含了5个特性和4个测试用例,具体如下:

  1. 特性优先级列表:

    • 特性1的优先级为1
    • 特性2的优先级为1
    • 特性3的优先级为2
    • 特性4的优先级为3
    • 特性5的优先级为5
  2. 测试用例及其涉及的特性:

    • 测试用例1涉及的特性为1, 2, 3
### 华为ODE 增强的strstr C语言 实现 方法 示例 增强的`strstr`函数是一种扩展功能,允许通过带有可选段的模式字符串进行模糊匹配。以下是基于已有引用和专业知识设计的一种实现方式。 #### 函数定义 增强的`strstr`函数接受两个参数:源字符串 `haystack` 和目标字符串 `needle`。其中,目标字符串可能包含方括号 `[ ]` 定义的可选字符集。例如,“a[bc]d”可以匹配“abd”或“acd”。 #### 思路分析 1. 遍历源字符串 `haystack` 的每一个起始位置。 2. 对于当前起始位置,尝逐字符匹配目标字符串 `needle`。 3. 如果遇到方括号部分,则检查其内部的任一字符是否能匹配源字符串中的对应字符。 4. 若完全匹配到目标字符串,则记录并返回当前位置;否则继续下一轮匹配。 5. 如果遍历结束仍未找到匹配项,则返回 `-1`。 #### 示例代码 以下是一个完整的C语言实现: ```c #include <stdio.h> #include <string.h> // 辅助函数:判断单个字符是否属于指定范围内的任意一个字符 int isCharInRange(char c, const char *rangeStart) { int i = 0; while (rangeStart[i] != ']') { // 找到右括号前的所有字符 if (c == rangeStart[i]) { return 1; // 匹配成功 } i++; } return 0; // 不匹配 } // 主函数:增强版 strstr int enhancedStrstr(const char *haystack, const char *needle) { int hLen = strlen(haystack); int nLen = strlen(needle); if (nLen == 0) return 0; for (int i = 0; i <= hLen - nLen; ++i) { int j = 0; for (; j < nLen; ++j) { if (needle[j] == '[') { // 进入可选项区域 int k = j + 1; while (needle[k] != ']' && needle[k] != '\0') k++; // 寻找对应的 ] if (!isCharInRange(haystack[i + j], &needle[j])) break; // 判断是否匹配 j = k; // 跳过整个 [] 部分 } else if (haystack[i + j] != needle[j]) { // 正常字符不匹配 break; } } if (j == nLen) { // 成功匹配完整的目标字符串 return i; } } return -1; // 查找不到匹配项 } // 测试用例 void testEnhancedStrstr() { const char *source = "abcd"; const char *pattern = "b[c]"; printf("Result: %d\n", enhancedStrstr(source, pattern)); // 输出应为 1 source = "hello world"; pattern = "[aeiou]llo"; // 匹配含元音字母后的 llo printf("Result: %d\n", enhancedStrstr(source, pattern)); // 输出应为 2 } ``` 以上代码实现了增强型`strstr`的功能,并提供了测案例验证其实现效果[^2]^。 #### 复杂度分析 - 时间复杂度:最坏情况下需逐一比较每种可能性,因此整体复杂度接近 \(O(m \times n)\),其中 \(m\) 是源字符串长度,\(n\) 是目标字符串长度。 - 空间复杂度:由于仅使用少量辅助变量存储状态信息,空间开销固定为 \(O(1)\)[^4]^。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值