(C卷,100分)- 测试用例执行计划(Java & JS & Python & C)

题目描述

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

用例

输入 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

输入 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

 

题目解析

简单的自定义排序问题。

JS算法源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
  const [n, m] = (await readline()).split(" ").map(Number);

  const features = new Array(n + 1);
  for (let i = 1; i <= n; i++) {
    features[i] = parseInt(await readline());
  }

  const cases = [];
  for (let i = 1; i <= m; i++) {
    const priority = (await readline())
      .split(" ")
      .map((id) => features[id - 0]) // id-0是为了将字符串id转为数值id
      .reduce((a, b) => a + b);

    cases.push([priority, i]);
  }

  cases
    .sort((a, b) => (a[0] != b[0] ? b[0] - a[0] : a[1] - b[1]))
    .forEach(([_, id]) => console.log(id)); // forEach入参使用了数组解构语法
})();

Java算法源码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Main {
  static class TestCase {
    int id;
    int priority;

    public TestCase(int id, int priority) {
      this.id = id;
      this.priority = priority;
    }
  }

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int[] tmp = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    int n = tmp[0];
    int m = tmp[1];

    int[] features = new int[n + 1];
    for (int i = 1; i <= n; i++) {
      features[i] = Integer.parseInt(sc.nextLine());
    }

    ArrayList<TestCase> cases = new ArrayList<>();

    for (int i = 1; i <= m; i++) {
      int priority =
          Arrays.stream(sc.nextLine().split(" "))
              .map(Integer::parseInt)
              .map(id -> features[id])
              .reduce(Integer::sum)
              .orElse(0);

      cases.add(new TestCase(i, priority));
    }

    cases.stream()
        .sorted((a, b) -> a.priority != b.priority ? b.priority - a.priority : a.id - b.id)
        .map(testcase -> testcase.id)
        .forEach(System.out::println);
  }
}

Python算法源码

# 输入获取
n, m = map(int, input().split())

features = [0] * (n + 1)
for i in range(1, n+1):
    features[i] = int(input())

cases = []
for i in range(1, m+1):
    priority = sum(map(lambda x: features[int(x)], input().split()))
    cases.append([priority, i])

cases.sort(key=lambda x: (-x[0], x[1]))

for _, idx in cases:
    print(idx)

C算法源码

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int priority;
    int id;
} TestCase;

TestCase *new_TestCase(int id) {
    TestCase *testcase = (TestCase *) malloc(sizeof(TestCase));
    testcase->priority = 0;
    testcase->id = id;
    return testcase;
}

int cmp(const void *a, const void *b) {
    TestCase *A = *((TestCase **) a);
    TestCase *B = *((TestCase **) b);
    return A->priority != B->priority ? B->priority - A->priority : A->id - B->id;
}

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int features[n + 1];
    for (int i = 1; i <= n; i++) {
        scanf("%d", &features[i]);
    }

    TestCase *cases[m];
    for (int i = 0; i < m; i++) {
        cases[i] = new_TestCase(i + 1);

        int feature_id;
        while (scanf("%d", &feature_id)) {
            cases[i]->priority += features[feature_id];
            if (getchar() != ' ') break;
        }
    }

    qsort(cases, m, sizeof(TestCase *), cmp);

    for (int i = 0; i < m; i++) {
        printf("%dn", cases[i]->id);
    }

    return 0;
}

免责声明:

1、IT资源小站为非营利性网站,全站所有资料仅供网友个人学习使用,禁止商用
2、本站所有文档、视频、书籍等资料均由网友分享,本站只负责收集不承担任何技术及版权问题
3、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除下载链接并致以最深的歉意
4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
5、一经注册为本站会员,一律视为同意网站规定,本站管理员及版主有权禁止违规用户
6、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和IT资源小站的同意
7、IT资源小站管理员和版主有权不事先通知发贴者而删除本文

0

评论0

站点公告

没有账号?注册  忘记密码?