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

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

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

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

输入格式

第一行输入一个正整数 't' ('1 <= t <= 100'),表示测试数据组数; 之后对于每组数据,第一行输入一个正整数 'n' ('1 <= n <= 100'),表示数列长度; 第二行包含 'n' 个数,描述数列。 其中 '1 <= 每个数 <= 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;

string winner(vector<int>& nums) {
    int n = nums.size();
    int sum = 0;
    for (int i = 0; i < n; i++) {
        if (nums[i] % 2 == 0) {
            sum += nums[i];
        }
    }
    return sum % 2 == 0 ? "B" : "A";
}

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];
        }
        
        string result = winner(nums);
        cout << result << endl;
    }
    
    return 0;
}

代码解析

  1. winner 函数: 该函数接收一个整数向量作为参数,并返回游戏的获胜者。
  2. 计算偶数之和: 函数首先遍历整个向量,累加所有偶数的值。
  3. 判断胜负: 由于小 A 只能获得偶数的得分,因此如果偶数之和是偶数,则小 B 获胜(因为小 B 可以选择所有奇数,使得自己的得分与小 A 相同);反之,如果偶数之和是奇数,则小 A 获胜(因为小 A 可以选择所有偶数,使得自己的得分比小 B 高)。
  4. main 函数: 该函数接收测试数据组数,并逐一调用 winner 函数,输出每组数据的获胜者。

总结

通过分析游戏的规则和代码实现,我们可以得出结论:无论数字序列是什么,游戏的胜负取决于偶数之和的奇偶性。如果偶数之和是偶数,则小 B 获胜;如果偶数之和是奇数,则小 A 获胜。

希望本文能够帮助您更好地理解该游戏的策略和代码实现。如果您有任何疑问,请随时提出。

两人取数游戏:谁将获胜? - C++ 代码实现

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

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