【趣味编程】常胜将军
来源:互联网 发布:上海网络机柜回收 编辑:程序博客网 时间:2024/05/17 23:37
常胜将军
一、问题描述
游戏规则:AB两人玩取火柴的游戏,共有21根火柴。每人每次最多取4根,最少取一根。取到最后一根火柴的玩家算输。保证某一玩家每次都赢!
二、算法分析
如果每次都想让其中一个玩家赢(此处假设为B),那么只要控制最后剩余一根火柴给另一个玩家,就能保证B获胜;根据取火柴的总数可以知道只要保证每次都会取5根火柴,最后一定会剩余一根火柴,只要控制让最后一根火柴被A取走即可!所以如果A先取n根火柴,B只要每次只要取5-n根火柴,最后一根火柴肯定会被A取走;如果B先取火柴,则只要在前几次在5-n的取数中,多取5个就可以了!(常胜将军算法是取火柴游戏算法的一个特例)
三、代码实现
若使计算机每次获胜,那么该用户先取火柴(n),计算机每次取5-n;
import java.util.Scanner;public class Gilded {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int last = 21;//剩余火柴数System.out.println("常胜将军小游戏");while (true) { //死循环保证游戏能持续进行,直到决出胜负System.out.printf("目前火柴剩余%d根\n",last);System.out.print("用户取火柴的数量为:");//用户取火柴int user = sc.nextInt(); if ((user < 1)||(user > 4)||(user > last) ) { System.out.println("您的输入有误,请重试"); continue;}last = last - user;if (last == 0) {System.out.println("用户取了最后一根火柴,计算机获胜");break;}else {//计算机取火柴的数量int com = 5 - user;System.out.printf("计算机取火柴的数量为:%d\n",com);//剩余火柴数量last = last - com;if (last == 0) {System.out.println("计算机取了最后一根火柴,用户获胜");break;}}}}}
四、演示截图
阅读全文
0 0
- 【趣味编程】常胜将军
- C趣味编程]常胜将军(取火柴游戏)
- C趣味编程]常胜将军(取火柴游戏) 思路
- 【经典趣味算法】常胜将军算法
- 常胜将军
- 常胜将军
- (百例编程)88.常胜将军
- 趣味编程
- VFP趣味编程:百钱买百鸡
- 趣味编程:静夜思
- 趣味编程PHP
- 趣味编程:静夜思
- 编程趣味题1
- 编程趣味题2
- 编程趣味题3
- 编程趣味题4
- 趣味《游戏》编程5
- 编程趣味题6
- nyoj 856 华山论剑 (并查集or线段树区间点更新)
- npm 如何下载指定版本的组件
- PHP与微信小程序的纠葛---1
- 机器人公司
- 设计模式六大原则——迪米特法则
- 【趣味编程】常胜将军
- 17、树的子结构
- 理解编程语言
- JVM系列五:JVM监测&工具[整理中]
- ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息
- Thinkphp5 设置403 404等http状态页面
- Form窗体添加背景图片
- A计划
- ASP.NET MVC使用SSI来实现页面静态化