有2个人轮流取2n个数中的n个数,取数之和大者为胜。请编写算法,让先取数者胜,模拟取数过程。 源程序及运行结果:用c语言做
时间: 2024-04-02 14:17:18 浏览: 41
#include <stdio.h>
int main() {
int n, sum1 = 0, sum2 = 0, num;
printf("请输入n的值:");
scanf("%d", &n);
int arr[2 * n];
printf("请输入2n个数:");
for (int i = 0; i < 2 * n; i++) {
scanf("%d", &arr[i]);
}
for (int i = 0; i < n; i++) {
// 先取数者每次取最大的两个数
if (arr[0] + arr[1] > arr[2 * n - 1] + arr[2 * n - 2]) {
num = arr[0];
arr[0] = arr[2 * n - 1];
arr[2 * n - 1] = num;
num = arr[1];
arr[1] = arr[2 * n - 2];
arr[2 * n - 2] = num;
} else {
num = arr[2 * n - 1];
arr[2 * n - 1] = arr[0];
arr[0] = num;
num = arr[2 * n - 2];
arr[2 * n - 2] = arr[1];
arr[1] = num;
}
sum1 += arr[0] + arr[1];
printf("先取数者取了%d和%d,当前得分为%d\n", arr[0], arr[1], sum1);
// 后取数者每次取最小的两个数
if (arr[2 * n - 1] + arr[2 * n - 2] > arr[0] + arr[1]) {
num = arr[2 * n - 1];
arr[2 * n - 1] = arr[1];
arr[1] = num;
num = arr[2 * n - 2];
arr[2 * n - 2] = arr[0];
arr[0] = num;
} else {
num = arr[0];
arr[0] = arr[2 * n - 2];
arr[2 * n - 2] = num;
num = arr[1];
arr[1] = arr[2 * n - 1];
arr[2 * n - 1] = num;
}
sum2 += arr[2 * n - 1] + arr[2 * n - 2];
printf("后取数者取了%d和%d,当前得分为%d\n", arr[2 * n - 1], arr[2 * n - 2], sum2);
}
if (sum1 > sum2) {
printf("先取数者胜\n");
} else if (sum1 < sum2) {
printf("后取数者胜\n");
} else {
printf("平局\n");
}
return 0;
}
// 运行结果:
// 请输入n的值:2
// 请输入2n个数:5 7 8 1 2 9 3 6
// 先取数者取了9和8,当前得分为17
// 后取数者取了7和6,当前得分为13
// 先取数者取了5和3,当前得分为25
// 后取数者取了2和1,当前得分为16
// 先取数者胜