【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分

本文主要是介绍【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 文件名:[作业]
  • 作者:〈漆黑〉
  • 描述:〈 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分。两个人采取的策略都是让自己的得分尽量高,并且两人都足够聪明,求A的得分减去B的得分后的结果。
    【输入格式】
    输入包含多组数据。每组数据的第一行为n(1<=n<=100),第二行为给定的整数序列。输入结束标志为n=0.
    【输出格式】
    对于每组数据,输出A和B都采取最优策略的情况下,A的得分减去B的得分后的结果。 〉
  • 创建时间:2019.7.17
/****************************
* 文件名:[作业]
* 作者:〈漆黑〉
* 描述:〈  有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分。两个人采取的策略都是让自己的得分尽量高,并且两人都足够聪明,求A的得分减去B的得分后的结果。
【输入格式】
输入包含多组数据。每组数据的第一行为n(1<=n<=100),第二行为给定的整数序列。输入结束标志为n=0.
【输出格式】
对于每组数据,输出A和B都采取最优策略的情况下,A的得分减去B的得分后的结果。  〉
* 创建时间:2019.7.17
****************************/
#include <iostream>
#include<stdio.h>
using namespace std;int main(){while (1) {int n,  A = 0, B = 0;//n个数,max_l左边最大子列和,max_r右边最大子列和,sum_l暂存左边和, sum_r暂存右边和, A,B存总和cout << "请输入有多少个整数(1-100):";cin >> n;if (n == 0) return 0;//退出标志int* x = new int[n];cout << "请输入给定整数序列:";for (int i = 0; i < n; i++) {cin >> x[i];}int i, j, k = 0, l = n - 1;for (int o = 0; o < n; o++) {int q = 0, w = n - 1, max_l = INT_MIN, max_r = INT_MIN, sum_l = 0, sum_r = 0 ;i = k;j = l;for (; i <= l; i++) {//从左边的最大子序列sum_l += x[i];if (max_l <= sum_l) {max_l = sum_l;q = i;//q为从左最大的下标}}for (; j >= k; j--) {//从右边的最大子序列sum_r += x[j];if (max_r <= sum_r) {max_r = sum_r;w = j;//w为从右最大的下标}}if (o % 2 == 0) {//A先取if (max_l >= max_r) {//左边大A += max_l;k = q + 1;//此时左边从q+1开始找子列}else {//右边大A += max_r;l = w - 1;//此时右边从w - 1开始找子列}}else {//B后取if (max_l >= max_r) {//左边大B += max_l;k = q + 1;//此时左边从q+1开始找子列}else {//右边大B += max_r;l = w - 1;//此时右边从w - 1开始找子列}}if (k > l) {cout << "A的得分减去B的得分后的结果:" << A - B << endl;break;}}}
}

在这里插入图片描述

这篇关于【题目】 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/350424

相关文章

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出