两人轮流取数游戏:谁将获胜?
两人轮流取数游戏:谁将获胜?
给定一个包含 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 著作权归作者所有。请勿转载和采集!