两人轮流取数游戏:谁将获胜?

给定一个包含 n 个正整数的数列,小A和小B两人轮流进行取数游戏。

小A先手,每一轮一人从数列中选取一个数并将这个数从数列中删掉,如果小A选择的数是偶数,则小A的得分加上这个数,否则小A不加分;如果小B选择的数是奇数,则小B的得分加上这个数,否则小B不加分。

假设二人都采取最优策略,最后得分高的获胜,请输出获胜者,如果平局则需指明。

输入格式

第一行输入一个正整数 T (1 ≤ T ≤ 100),表示测试数据组数; 之后对于每组数据,第一行输入一个正整数 n,表示数列长度; 第二行包含 n 个数,描述数列 A。 其中 1 ≤ n ≤ 100, 1 ≤ A[i] ≤ 100。

输出格式

输出共 T 行,依次对应每组测试数据的结果。 如果小A获胜则输出 'A',如果小B获胜则输出 'B',若二人得分相同,则输出 'C'。

输入样例

4
4
5 2 7 3
3
3 2 1
4
2 2 2 2
2
7 8

输出样例

B
C
A
A

C++代码内容

#include <iostream>
#include <vector>

using namespace std;

// 判断一个数是奇数还是偶数
bool isOdd(int num) {
    return num % 2 != 0;
}

// 计算小A和小B的得分
void calculateScore(int num, int& scoreA, int& scoreB) {
    if (isOdd(num)) {
        scoreA += num;
    } else {
        scoreB += num;
    }
}

// 小A和小B进行取数游戏的函数
char playGame(vector<int>& nums) {
    int scoreA = 0;
    int scoreB = 0;
    int n = nums.size();

    for (int i = 0; i < n; i++) {
        // 小A先手
        if (i % 2 == 0) {
            calculateScore(nums[i], scoreA, scoreB);
        } else { // 小B后手
            calculateScore(nums[i], scoreB, scoreA);
        }
    }

    if (scoreA > scoreB) {
        return 'A';
    } else if (scoreA < scoreB) {
        return 'B';
    } else {
        return 'C';
    }
}

int main() {
    int t;
    cin >> t;

    while (t--) {
        int n;
        cin >> n;
        vector<int> nums(n);

        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }

        char winner = playGame(nums);
        cout << winner << endl;
    }

    return 0;
}
两人轮流取数游戏:谁将获胜?

原文地址: https://www.cveoy.top/t/topic/qoET 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录