两人取数游戏:谁将获胜? - C++ 代码实现
两人取数游戏:谁将获胜?
给定一个包含 '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;
}
代码解析
winner函数: 该函数接收一个整数向量作为参数,并返回游戏的获胜者。- 计算偶数之和: 函数首先遍历整个向量,累加所有偶数的值。
- 判断胜负: 由于小 A 只能获得偶数的得分,因此如果偶数之和是偶数,则小 B 获胜(因为小 B 可以选择所有奇数,使得自己的得分与小 A 相同);反之,如果偶数之和是奇数,则小 A 获胜(因为小 A 可以选择所有偶数,使得自己的得分比小 B 高)。
main函数: 该函数接收测试数据组数,并逐一调用winner函数,输出每组数据的获胜者。
总结
通过分析游戏的规则和代码实现,我们可以得出结论:无论数字序列是什么,游戏的胜负取决于偶数之和的奇偶性。如果偶数之和是偶数,则小 B 获胜;如果偶数之和是奇数,则小 A 获胜。
希望本文能够帮助您更好地理解该游戏的策略和代码实现。如果您有任何疑问,请随时提出。
原文地址: https://www.cveoy.top/t/topic/qoEU 著作权归作者所有。请勿转载和采集!