7-1 简版田忌赛马分数 10

作者 usx程序设计类课程组

单位 绍兴文理学院

这是一个简版田忌赛马问题,具体如下:
田忌与齐王赛马,双方各有n匹马参赛,每场比赛赌注为200两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,请写一个程序帮助田忌计算他最多赢多少两黄金(若输,则用负数表示)。
简单起见,保证2n匹马的速度均不相同。

输入格式:

首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试数据输入3行,第一行是n(1≤n≤100) ,表示双方参赛马的数量,第2行n个正整数,表示田忌的马的速度,第3行n个正整数,表示齐王的马的速度。

输出格式:

对于每组测试数据,输出一行,包含一个整数,表示田忌最多赢多少两黄金。

输入样例:

4
3
92 83 71
95 87 74
2
20 25
21 12
10
1 2 3 24 5 6 7 8 9 12
11 13 15 19 22 34 14 21 44 99
4
10 15 16 37
14 20 30 40

输出样例:

200
400
-1200
0

c语言代码解析如下

#include <stdio.h>
int main() {
    int t;
    scanf("%d", &t);

    for (int i = 0; i < t; i++) {
        int n;
        scanf("%d", &n);//接收个数

        int tian[n], qi[n];
        for (int j = 0; j < n; j++) {
            scanf("%d", &tian[j]);//接收tianji马的速度
        }

        for (int j = 0; j < n; j++) {
            scanf("%d", &qi[j]);//接收qi马的速度
        }

        //对这两组数据同时进行排序
        for (int j = 0; j < n - 1; j++) {
            for (int k = 0; k < n - j - 1; k++) {
                if (tian[k] > tian[k + 1]) {
                    // 交换tian[k]和tian[k+1]
                    int temp = tian[k];
                    tian[k] = tian[k + 1];
                    tian[k + 1] = temp;
                }

                if (qi[k] > qi[k + 1]) {
                    // 交换qi[k]和qi[k+1]
                    int temp = qi[k];
                    qi[k] = qi[k + 1];
                    qi[k + 1] = temp;
                }
            }
        }

        //开始遍历
        int x = 0;
        int y = 0;
        int count = 0;

        for (x = 0; x < n; x++) {
            for (y = 0; y < n;) {
                if (tian[y] > qi[x]) {
                    y += 1;
                    count += 1;
                    break;
                } else {
                    y += 1;
                }
            }
            if (y == n) {
                break;  // 田忌所有的马都不能赢
            }
        }
        printf("%d\n", count * 200 - (n - count) * 200);
    }
    return 0;
}

python代码的解析如下

t = int(input())
for i in range(t):
    n = int(input())
    tian = list(map(int, input().split()))  # 田忌马的速度
    qi = list(map(int, input().split()))  # 齐王马的速度
    tian.sort()
    qi.sort()
    x = 0
    y = 0
    count = 0
    for x in range(n):
        for y in range(n):  # 找到田忌比齐王最弱的马强的下标,齐马增加,田的马从y开始
            if tian[y] > qi[x]:
                y += 1
                count += 1
                break
            else:
                y += 1
        if y == n:
            break  # 田忌所有的马都不能赢
    print(count*200 - (n-count)*200)

猜你喜欢

转载自blog.csdn.net/Androidandios/article/details/134431082
7-1
今日推荐