JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计
JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计
看到了这样的一道题目,还挺有意思,可以通过不同的算法设计来求解。
话说大诗人李白,一生好饮。一日,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:
无事街上走,提壶去打酒。
逢店加一倍,遇花喝一斗。
这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。
请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。
像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
问题分析
通过题目描述,我们可以获得信息:
- 初始条件:酒壶中有酒2斗
- 逢店加一倍,遇花喝一斗
- 遇到店5次,遇到花10次
- 最后一次遇到的是花,喝光了酒壶中的酒(隐含信息是酒壶中剩余的1斗酒被喝光了,结束)。
于是题目可以简化为,李白从家里出来,有2斗酒,遇店5次,遇花9次,最后还剩1斗酒。
算法设计
1. 采用递归算法
/** 递归算法*/public static int func(int bistro, int flower, int amount) {/** 处理小酒馆数量、花的数量、酒的余量异常情况* */if (bistro < 0 || flower < 0 || amount < 0) {return 0;}if (bistro == 0 && flower == 1 && amount == 1) {return 1; // 保证最后一个遇见花并且把酒喝光}// 逢店加一倍,遇花喝1斗return func(bistro - 1, flower, 2 * amount) + func(bistro, flower - 1, amount - 1);}
完整的程序执行结果(递归算法):
package com.bean.algorithmbasic;public class LiBaiHeJiu3 {private static int ANSWER = 0;public static void main(String[] args) {int answer=func(5,10,2);System.out.println("answer = " + answer);}/** 递归算法*/public static int func(int bistro, int flower, int amount) {/** 处理小酒馆数量、花的数量、酒的余量异常情况* */if (bistro < 0 || flower < 0 || amount < 0) {return 0;}if (bistro == 0 && flower == 1 && amount == 1) {return 1; // 保证最后一个遇见花并且把酒喝光}// 逢店加一倍,遇花喝1斗return func(bistro - 1, flower, 2 * amount) + func(bistro, flower - 1, amount - 1);}}
answer = 14
2. 采用DFS算法
/** DFS算法设计:* 参数选择:amount代表酒量;bistro代表小酒馆;flower代表花;flag为标记 flag=0表示结束条件* */public static void dfs(int amount,int bistro,int flower,int flag) { if(bistro==0&&flower==0) { if(flag==0&&amount==0)//标记最后一次遇到的是花 { ANSWER++; } //return;//已经没有店家和花,此时不管是否情况正确,都退出递归 } if(bistro > 0) { //amount*2,满足条件逢店加倍;bistro-1:小酒馆数-1;dfs(amount*2,bistro-1,flower,1); //标记遇到的是店家 } if(amount > 0 && flower > 0) { //amount-1,满足条件逢花喝1斗;flower-1:遇到花的次数-1;dfs(amount-1,bistro,flower-1,0); // 标记遇到的是花 } }
完整的程序执行结果:
package com.bean.algorithmbasic;public class LiBaiHeJiu2 {private static int ANSWER=0;public static void main(String[] args) {/** 调用DFS算法,设定条件* 初始时酒2都,遇到5次店,10次花,最后就没有了,设定标记为flag=0*/dfs(2,5,10,0);System.out.println("ANSWER = "+ANSWER);}/** DFS算法设计:* 参数选择:amount代表酒量;bistro代表小酒馆;flower代表花;flag为标记 flag=0表示结束条件* */public static void dfs(int amount,int bistro,int flower,int flag) { if(bistro==0&&flower==0) { if(flag==0&&amount==0)//标记最后一次遇到的是花 { ANSWER++; } //return;//已经没有店家和花,此时不管是否情况正确,都退出递归 } if(bistro > 0) { //amount*2,满足条件逢店加倍;bistro-1:小酒馆数-1;dfs(amount*2,bistro-1,flower,1); //标记遇到的是店家 } if(amount > 0 && flower > 0) { //amount-1,满足条件逢花喝1斗;flower-1:遇到花的次数-1;dfs(amount-1,bistro,flower-1,0); // 标记遇到的是花 } }
}
ANSWER = 14
JAVA算法:李白遇花喝酒游戏JAVA DFS 算法设计相关推荐
- 基于java+swing的潜艇大战项目游戏(java+swing)
基于java+swing的潜艇大战项目游戏(java+swing) 功能简介: Java swing实现的一款小游戏潜艇大战的项目源码 适用 课程设计,大作业,毕业设计,项目练习,学习演示等 bool ...
- java随机数抽奖系统_Java实现游戏抽奖的算法
Java实现游戏抽奖的算法 发布时间:2020-05-29 13:27:44 来源:亿速云 阅读:282 作者:鸽子 Java开发游戏抽奖算法主要有随机数一一对应.离散法Alias算法等. 一.随机数 ...
- java/php/net/python“最终幻想14”游戏时装图鉴网站设计与制作
本系统带文档lw1万字+答辩PPT+查重 如果这个题目不合适,可以去我上传的资源里面找题目,找不到的话,评论留下题目,或者站内私信我, 有时间看到机会给你发 1.关于"最终幻想14" ...
- 【C#算法实现】QQ小游戏天天连萌(连连看)算法。
2019独角兽企业重金招聘Python工程师标准>>> 算法是程序的灵魂,优秀的算法可以高效率解决实际问题.继腾讯安卓游戏天天爱消除之后又一款十分好玩的游戏--天天连萌,其实就是以前 ...
- Java窗体实现飞机躲子弹游戏,java awt swing 飞机躲子弹
[实例简介] [实例截图] [核心代码] package com.plane.game; import javax.swing.JComboBox; import javax.swing.JFrame ...
- [蓝桥杯][算法提高VIP]开灯游戏(dfs)
题目描述 有9盏灯与9个开关,编号都是1~9. 每个开关能控制若干盏灯,按下一次会改变其控制的灯的状态(亮的变成不亮,不亮变成亮的). 具体如下: 第一个开关控制第二,第四盏灯: 第二个开关控制第一, ...
- java——博弈算法实现井字棋游戏
通过java语言开发了一个简单的井字棋游戏.主要有6个类,其中有一个是主类(Main.java),一个是抽象类(PiecesMove.java)组成. 下面对各个类简单介绍一下: TicTicToe. ...
- java ktv喝酒游戏
import java.util.Scanner; import java.util.Random; public class cs喝酒游戏 { static Scanner scanner; sta ...
- Java游戏里面的星球大战_星球大战手机游戏-JAVA程序算法
内容简介: 毕业设计 星球大战手机游戏-JAVA程序算法,共18页,9196字 摘 要 近年来,随着各种不同设备,尤其是移动通信设备的飞速发展诞生了一项新的开发技术-J2ME.它定位在消费性电子产品的 ...
最新文章
- 2021年大数据基础(四):​​​​​​​​​​​​​​​​​​​​​大数据业务分析基本步骤
- 初级开发人员的缺点_这是我想放弃初级开发人员时所做的事情
- 利用python进行数据分析 百度云-利用Python进行数据分析 原书第2版.pdf
- 如何结合SharePoint Designer 2010 与Visio 2010 创建工作流?
- Spring Cloud Sleuth进阶实战
- struct和union,enum分析
- 深入分析.NET应用程序SQL注入【危害】
- 微信小程序云开发教程-WXML入门-数据绑定
- Atitit 获取剪贴板内容 目录 1.1. ava提供两种类型的剪贴板:系统的和本地的.	1 1.2. Atitit 剪贴板数据类型 DataFlavor	1 1.3. Atitit 获取剪贴板内
- 使用Requests+xpath实现简单的数据爬取
- ubuntu 最新提权漏洞_Ubuntu和Debian最新的KDE安全漏洞,附-修复指南
- 2020年三非上岸北邮计算机院考研经验贴(励志)
- 查询天气预报的php代码,jQuery输入城市查询天气预报代码
- 459-Linux基础(echo)
- Excel如何查找重复内容
- Android中常用的一些颜色色值color整理
- 从 MVC 到使用 ASP.NET Core 6.0 的最小 API
- STM32系统定时器SysTick
- 机器学习常用「微积分」知识速查手册
- 有三个线程T1,T2,T3,下面方法可以确保它们按顺序执行的有()该线程继续执行
热门文章
- 微信号码开通状态检测
- 微pe工具箱+软碟通 制作 U盘启动盘
- html怎么导入flash视频,DW如何在网页中插入Flash视频?
- 学会这三款软件,可以轻松完成录音转文字操作
- CMDN创新应用:果库 - 帮助你发现喜欢的商品
- matlab股票分析系统,matlab股票预测系统,matlab股票决策
- 微信小程序访问豆瓣电影API 403 400
- 导入依赖失败,报错信息Failed to resolve: com.*.*:*:0.0.0<a href=““>Show in Project Structure dialog
- 番茄助手 Visual Assist X 下载安装及使用
- flutter中地图定位