作者主页:Designer 小郑
作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者,在校期间参加PAT乙级考试获得满分,三年ACM竞赛经验,斩获国奖两项,省奖五项。热爱技术、专注业务、开放合作、乐于分享,期待你我共同成长!
主打方向:Vue、SpringBoot、微信小程序

题目链接:题目链接

题面:

小王在太空完成遨游后,就受邀来到了太空的飞机场指挥室,“太空号”少将小张早已等候他多时!

指挥所窗外是看不到界限的直线停机场,小张要和小王比试飞机的指挥能力,小王接受了挑战!

比赛规则是这样的:

  1. 设指挥所窗外的第一个停机位编号为 0,窗外的第二个停机位编号为 1,以此类推。
  2. 小王和小张双方轮流将某辆飞机召回到距离指挥所更近的停机位。
  3. 飞机场上停有 N 辆初始的飞机,停机位编号分别为 a[0] 到 a[n-1](取值大于0,即没有初始就停在编号为 0 的飞机)。
  4. 飞机可以在这个超级太空中复用空间,即可以重叠排放,允许一个停机场停放无数多辆飞机,但最近只能召回到指挥所窗外的第一个停机位。
  5. 当所有的初始飞机都被召回到指挥所窗外的第一个停机位时,最后召回的人获胜。

小张很赏识小王的作战能力,每次比赛都让小王先手指挥,请问小王能获胜吗?

若小王可以获胜,请输出 Yes,若不能获胜则输出 No

引用说明:上面的图片来源于蓝桥云课。

知识点

  • Java 的异或运算
  • 必败态的分析
  • 尼姆博弈

初始代码

public class FMain {public static String doWork(List<Integer> list) {//代码编辑区 开始return "No";//代码编辑区 结束}public static void main(String[] args) {//测试用例System.out.println((Objects.equals("Yes",doWork(Arrays.asList(7,7,7))) ? "【√正确】" : "【X错误】 ") + "初始飞机停车编号为: 7 7 7,答案:" + doWork(Arrays.asList(7,7,7)));System.out.println((Objects.equals("No",doWork(Arrays.asList(7,7))) ? "【√正确】" : "【X错误】")  + " 初始飞机停车编号为: 7 7,答案:" + doWork(Arrays.asList(7,7)));}
}

样例说明

输入数据是一个 List,里面包括了 N 辆飞机的停机场编号。

如 List 内数值为 [7, 7, 7],代表初始有三辆飞机,均停在编号为 7 的停机场,小王只需先召回其中一辆飞机到第一个停机位,剩下只要学小张的方法即可,必定可以获胜,输出 Yes

如 List 内数值为 [7, 7],代表初始有两辆飞机,均停在编号为 7 的停机场,不管小王如何召回,小张只要学小王的方法必定获胜,所以小王必败,输出 No

题解

考察对尼姆博弈的理解,此题寻找 必败态(0,0) 为关键。

若只有两辆飞机,且处于同一位置,则为先手的必败态,即(N,N)是必败态

若有三辆飞机,其中两辆处于同一位置,第三辆在零点,即(N,N,0)也是必败态

根据尼姆博弈的理论,可以推出飞机下标值的异或结果 X,若 X 等于 0,则小王可以获得胜利,否则小张胜利。

参考代码如下:

import java.util.Arrays;
import java.util.List;
import java.util.Objects;public class FAns {public static String doWork(List<Integer> list) {//代码编辑区 开始int ans = 0;for (Integer i : list) {ans ^= i;}return Objects.equals(0,ans) ? "No" : "Yes";//代码编辑区 结束}public static void main(String[] args) {//测试用例System.out.println((Objects.equals("Yes",doWork(Arrays.asList(7,7,7))) ? "【√正确】" : "【X错误】 ") + "初始飞机停车编号为: 7 7 7,答案:" + doWork(Arrays.asList(7,7,7)));System.out.println((Objects.equals("No",doWork(Arrays.asList(7,7))) ? "【√正确】" : "【X错误】")  + " 初始飞机停车编号为: 7 7,答案:" + doWork(Arrays.asList(7,7)));}
}

总结

要 AC 本题,必须学会尼姆博弈的算法,找到先手或后手的必败态,再尔退出必胜态,最终通过本题。

华硕编程竞赛11月JAVA专场 D题飞机大战 题解相关推荐

  1. 华硕编程竞赛11月JAVA专场 A题自由弹簧 题解

    作者主页:Designer 小郑 作者简介:软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导.CSDN学院 ...

  2. 华硕编程竞赛11月JAVA专场 C题太空遨游 题解

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  3. 华硕编程竞赛11月JAVA专场 G题飞行棋 题解

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  4. 华硕编程竞赛11月JAVA专场 B题召唤精灵 题解

    作者主页:Designer 小郑 作者简介:软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导.CSDN学院 ...

  5. 华硕编程竞赛11月JAVA专场 J题再见天空 题解

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  6. 关于517编程的11月月赛

    关于517编程的11月月赛-Nov.29 by Jasonxu 我是传送门 T1:umin之和 1.1题目 小海狸定义 umin为最小的没有在子集中出现过的非负整数. 小海狸有一组非负整数,他希望将这 ...

  7. Java多线程编写简易飞机大战(一)

    ** Java多线程编写简易飞机大战(一) ** 利用多线程编写飞机大战,主要有3个关键: ①继承Thread类,重写run方法: ②线程工作代码在run方法中写: ③启动时,调用线程对象的start ...

  8. 用JAVA制作小游戏——飞机大战(三)

    本篇博客是对飞机大战游戏项目完整代码的展示 详细代码讲解: 用JAVA制作小游戏--飞机大战(一) 用JAVA制作小游戏--飞机大战(二) 最下方附整个程序的文件下载链接 代码展示 主界面 impor ...

  9. 用JAVA制作小游戏——飞机大战(二)

    本篇博客是对飞机大战游戏使用代码的展示 重难点: 首先需要鼠标能够控制战机,使鼠标在窗口内时始终能够使战机的位置与鼠标相同,实现鼠标控制战斗机移动. 其次需要能够以一定的速度产生子弹和敌机,并且以一定 ...

最新文章

  1. java猜数游戏有次数限制_“去小学化”之后,可以这样开展数学游戏,让孩子玩中学,学中乐!...
  2. 西门子opc服务器注册,《西门子opc服务器的说明》.pdf
  3. Redis内存分析方法
  4. Solidworks二次开发 Addin模版使用
  5. 产品的思维与技术的思维差异
  6. 微信小程序开发工具调试没问题,真机调试Provisional headers are shown
  7. 华为云ManageOne北向对接之基本名词概念(一)
  8. 江南爱窗帘十大品牌,怎么合理的搭配窗帘配色
  9. 如何将fsdb波形转成csv等可读性文本格式
  10. nand flash基础——基本结构
  11. Gym-101502J(取数博弈+dp)
  12. import numpy出现ImportError: DLL load failed: 找不到指定的模块的解决方案
  13. oracle导入报错ora01652,Oracle ORA-01652错误
  14. 0、PIC系列参考手册中文版文档汇总
  15. 线程定义, 实现方式及代码实现.
  16. python 文件读取错误之FileNotFoundError: [Errno 2] No such file or directory:,顺便学习斜杠/和反斜杠\的用法
  17. NVIDIA NCCL 源码学习(九)- 单机内ncclSend和ncclRecv的过程
  18. 复古传世手游服务器维护,新出的《复古传世》手游到底应该怎么玩,这里有篇攻略供大侠参考...
  19. txt文档操作(导出和导入)【工具包系列】
  20. js随机生成彩票号码 双色球

热门文章

  1. Linux文件/目录所属组修改
  2. android7虚拟定位,Android8.0还早 EMUI助推Android7.0普及
  3. 能源消耗监测管理系统:实现企业用能定额、降低成本节能管理
  4. 人力资源管理专业知识与实务(初级)【3】
  5. Linux串口驱动程序(6)-串口驱动实现
  6. springBoot下java代码mysql数据库定时任务(创建表)
  7. 【新学期、新Flag】那年花开月正圆,我,正青春
  8. 剪辑视频,如何提取视频封面
  9. 深度学习有哪些实用又好玩的应用?
  10. 前端项目之--提升用户体验,提升前端性能