取数游戏。A和B轮流去取2n个数,规定只能在数组的头尾选取,所取数之和大者为胜。现给定数据16,27,7,12,9,2,11,6,两人采取贪心策略进行游戏,如果由A先开始取,那么最后的游戏结果是谁胜利?取数之和又是多少?
时间: 2023-10-17 22:06:08 浏览: 47
假设A先手,则A有两种选择:取16或取6。如果A取16,则B有两种选择:取6或取11,如果B取6,则A有两种选择:取27或取2,如果A取27,则B有两种选择:取2或取9,如果B取2,则A只能取12,这时B可以取剩下的两个数,所以A得分为16+27+12=55,B得分为7+9+2+11+6=35。
如果A取6,则B有两种选择:取16或取11,如果B取16,则A有两种选择:取27或取2,如果A取27,则B有两种选择:取2或取9,如果B取2,则A只能取12,这时B可以取剩下的两个数,所以A得分为6+27+12=45,B得分为16+7+9+2+11=45。
综上所述,如果A先手,则最后的游戏结果是A胜利,取数之和为55。
相关问题
取数游戏。A和B轮流去取2n个数,规定只能在数组的头尾选取,所取数之和大者为胜。现给定数据16,27,7,12,9,2,11,6,两人采取贪心策略进行游戏,如果由A先开始取,那么最后的游戏结果是( )。
根据题目条件,我们可以把给定数据排成一个数组:
```
16 27 7 12 9 2 11 6
```
A先取,因此A会优先选择最大的数或者最小的数。
如果A选择了16,那么B就应该选择6,这样A只能在剩下的数中选择,B可以选择最大或最小的数,所以B会赢得胜利。
如果A选择了6,那么B就应该选择16,这样A只能在剩下的数中选择,B可以选择最大或最小的数,所以B会赢得胜利。
无论A选择哪个数,B都可以采取相应的策略来获胜,因此最后的游戏结果是B胜利。
有2个人轮流取2n个数中的n个数,取数之和大者为胜。请编写算法,让先取数者胜,模拟取数过程。 源程序及运行结果:用c语言做
#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
// 先取数者胜
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)