题目9、取球博弈

取球博弈

两个人玩取球的游戏。
一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目。
如果无法继续取球,则游戏结束。
此时,持有奇数个球的一方获胜。
如果两人都是奇数,则为平局。 假设双方都采用最聪明的取法,
第一个取球的人一定能赢吗?
试编程解决这个问题。 输入格式:
第一行3个正整数n1 n2 n3,空格分开,表示每次可取的数目 (0<n1,n2,n3<100)
第二行5个正整数x1 x2 ... x5,空格分开,表示5局的初始球数(0<xi<1000) 输出格式:
一行5个字符,空格分开。分别表示每局先取球的人能否获胜。
能获胜则输出+,
次之,如有办法逼平对手,输出0,
无论如何都会输,则输出- 例如,输入:
1 2 3
1 2 3 4 5 程序应该输出:
+ 0 + 0 - 再例如,输入:
1 4 5
10 11 12 13 15 程序应该输出:
0 - 0 + + 再例如,输入:
2 3 5
7 8 9 10 11 程序应该输出:
+ 0 0 0 0 资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 3000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。 本题是拈游戏的一个拓展,考查减治法和动态规划法思想的运用,下面代码,对于题中所给三组数据均可以通过,但是对于平局(均为奇数或均为偶数)细节处理问题上有待证明,感觉自己处理的不够严谨。下面代码仅供参考哦~
import java.util.Scanner;

public class Main {
public static int[] value = new int[1000];
public static int[] getN = new int[3];
public static int[] init = new int[5];
public static char[] result = {'-','0','0','+'}; public static void main(String[] args) {
Scanner in = new Scanner(System.in);
for(int i = 0;i < 3;i++)
getN[i] = in.nextInt();
for(int i = 0;i < 5;i++)
init[i] = in.nextInt();
int minN = Math.min(getN[0], Math.min(getN[1], getN[2]));
if(minN % 2 == 1) //此处关于平局,两者是均为奇数,还是均为偶数问题,这里处理原因,是我自己猜想
value[0] = 1; //代表平局,两者默认均为奇数个
else
value[0] = 2; //代表平局,两者默认均为偶数个
for(int i = 1;i < minN;i++)
value[i] = 2; //0代表负,1和2代表平局,3代表胜
for(int i = minN;i < 1000;i++) {
int temp = 0; //初始化,当前i个球,先取者必输 for(int j = 0;j < 3;j++) {
if(i - getN[j] < 0)
continue;
if(i - getN[j] == 0 && getN[j] % 2 == 1)
temp = 3;
if(value[i - getN[j]] == 0) { //表示i - getN[j]个球先取时,必输
if(getN[j] % 2 == 0)
temp = 3;
//此时最终结果为两人取的球均为偶数个,但是若temp取三个数中另外一个数时
//,是必赢结果,则舍弃这个平局结果
else
temp = 2 > temp ? 2 : temp;
}
if(value[i - getN[j]] == 1) { //表示i - getN[j]个球先取时,两人取球均为奇数个
if(getN[j] % 2 == 0)
temp = 1 > temp ? 1 : temp; //此处做比较同上
}
if(value[i - getN[j]] == 2) {//表示i - getN[j]个球先取时,两人取球均为偶数个
if(getN[j] % 2 == 1)
temp = 3; //此种情况出现,必赢,不必做比较判断
else
temp = 2 > temp ? 2 : temp; //此处比较同上,排除必输情况
}
if(value[i - getN[j]] == 3) {//表示i - getN[j]个球先取时,必赢
if(getN[j] % 2 == 1)
temp = 1 > temp ? 1 : temp;
}
} value[i] = temp; //当前i个球,先取者最终输赢结果
}
//打印题意最终结果
for(int i = 0;i < 5;i++)
System.out.print(result[value[init[i]]]+" ");
}
}

java实现第七届蓝桥杯取球博弈的更多相关文章

  1. java算法 第七届 蓝桥杯B组(题+答案) 9.取球博弈

    9.取球博弈  (程序设计) 两个人玩取球的游戏.一共有N个球,每人轮流取球,每次可取集合{n1,n2,n3}中的任何一个数目.如果无法继续取球,则游戏结束.此时,持有奇数个球的一方获胜.如果两人都是 ...

  2. 2016蓝桥杯"取球博弈"问题

    较难,网上有能得出正确结果的代码,但是读了一下,像是拼凑出的结果,逻辑不通,代码和注释不符 参考网上代码写了一版,结构相对清晰,注释比较详细 题目很长: 两个人玩取球的游戏.一共有N个球,每人轮流取球 ...

  3. java实现第七届蓝桥杯冰雹数

    题目8.冰雹数 题目描述 任意给定一个正整数N, 如果是偶数,执行: N / 2 如果是奇数,执行: N * 3 + 1 生成的新的数字再执行同样的动作,循环往复. 通过观察发现,这个数字会一会儿上升 ...

  4. java实现第七届蓝桥杯七星填数

    七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...

  5. java算法 第七届 蓝桥杯B组(题+答案) 10.压缩变换

    10.压缩变换  (程序设计) 小明最近在研究压缩算法.他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比.然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些 ...

  6. Java实现第七届蓝桥杯国赛 赢球票

    标题:赢球票 某机构举办球票大奖赛.获奖选手有机会赢得若干张球票. 主持人拿出 N 张卡片(上面写着 1~N 的数字),打乱顺序,排成一个圆圈. 你可以从任意一张卡片开始顺时针数数: 1,2,3- 如 ...

  7. java实现第七届蓝桥杯四平方和

    四平方和 四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^ ...

  8. java实现第七届蓝桥杯平方圈怪

    平方圈怪 题目描述 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数. 对新产生的正整数再做同样的处理. 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环 ...

  9. java实现第七届蓝桥杯有奖竞猜

    有奖竞猜 题目描述 小明很喜欢猜谜语. 最近,他被邀请参加了X星球的猜谜活动. 每位选手开始的时候都被发给777个电子币. 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为 ...

随机推荐

  1. java ->IO流_字节流

    字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 字节输出流OutputStream OutputStre ...

  2. docker 垃圾回收机制

    docker垃圾回收机制 作者: 张首富 时间: 2019-04-10 个人博客: www.zhangshoufu.com QQ群: 895291458 说明 对于Docker来说,存在镜像/容器/存 ...

  3. JS的IIFE

    1. 定义 IIFE: Immediately Invoked Function Expression,意为立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数. 首先我们要了解一般情况下什 ...

  4. 关于字符串函数size()的问题

    首先如果你是一段语句 for(int i=0;i<a.size();i++)这个时候会报错 comparison between signed and unsigned integer expr ...

  5. Django视图函数之request请求与response响应对象

    官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...

  6. You should consider upgrading via the 'python -m pip install --upgrade pip' command.

    pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', ...

  7. VMware如何克隆一个虚拟机

    如何在Vmware克隆一个虚拟机,并修改哪些配置. 克隆虚拟机步骤 其中模板虚拟机的安装部署可参见:「VMware安装Linux CentOS 7.7系统」 找到克隆的模板机,并选择克隆. 进入克隆虚 ...

  8. Spring @Required 注释

    @Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个BeanInitializationExc ...

  9. A+B Coming(hdu1720)

    思考:十六进制的输入->%x,定义时用int.要变成十进制输出,直接在输出时用->%d. #include<stdio.h> int main() { int A,B; cha ...

  10. 关于lua的那些事

    1.lua是一个脚本语言,由巴西里约热内卢天主教大学Roberto Ierusalimschy.Waldemar Celes 和 Luiz Henrique de Figueiredo三人所组成的研究 ...