蓝桥分酒java_[蓝桥杯][java]海盗分酒
/* * 有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... * 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。 等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......” 请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。 如果有多个可能的答案,请列出所有答案,每个答案占一行。 格式是:人数,人数,... 例如,有一种可能是:20,5,4,2,0 答案写在“解答.txt”中,不要写在这里! [解题思路] 此题有如下几个特点: 1. 次数是固定的,总共有4次 2. 最后一轮的人(包括海盗船长的饮酒量是确定的,就是一瓶) 3. 每次都是一瓶酒平分,每次饮酒的人,包括海盗船长,的饮酒量都是1/当前轮次中的总人数 4. 初始人数不确定,仅知道不可能多于20人 本题最适合采用逆向的递归来实现 1. 设置一个数组,下标从0开始,其中的每个元素的内容表示每轮的人数 2. 初始值为0,保存在下标为0的元素中. 3. 由后向前逆推,每欠尝试上一轮的人数,尝试时有这样的一些准则: 1) 上一轮的人数必须比本轮的人数多 2) 上一轮人数不可能多于20人 4. 递归结束的条件: 1)到达了下标为4的元素 2)当前元素中的值不大于20 3)数组中前5位值的总和为1 5. 递归递进的条件 1) 当前的下标不为4 [解题流程] 1. 接受当前的人数数组 2. 接受当前的下标值 3. 接受起始的人数值 4. 从当前起始的人数值开始计算,循环尝试到20 每取一个值时,判断当前下标是否达到了4 是: 判断数组中表示的总的饮酒量是否为1 是: 输出结果 否: 调用自身,再次尝试下一步操作 [运行结果] * */ public class WineCaption { public static int[] wineLoop = new int[5]; public static void printWineProc(int[] wineLoop){ for(int i=wineLoop.length-1; i>=0; i--) { System.out.print(wineLoop[i]); if(i>0) System.out.print(','); } System.out.println(); } public static boolean calcTotalWine(int[] wineLoop){ int totalFenZi = 0; int totalFenMu = 0; totalFenMu = wineLoop[1]*wineLoop[2]*wineLoop[3]*wineLoop[4]; totalFenZi = totalFenMu / wineLoop[1] + totalFenMu / wineLoop[2] + totalFenMu / wineLoop[3] + totalFenMu / wineLoop[4]; return totalFenMu == totalFenZi; } public static void drink(int[] wineLoop, int xb, int startNumber){ for(int i=startNumber; i<=20; i++){ wineLoop[xb] = i; if(xb==4) { if(calcTotalWine(wineLoop)) printWineProc(wineLoop); } else drink(wineLoop,xb+1,i+1); } } public static void main(String[] args) { // TODO Auto-generated method stub for(int i=0; i<5; i++) wineLoop[i]=0; drink(wineLoop,1,1); } }
蓝桥分酒java_[蓝桥杯][java]海盗分酒相关推荐
- [蓝桥杯][java]海盗分酒
/* * 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复...... * 直到开了第4瓶酒,坐着的 ...
- 统计扣分加分java_再也不怕违章扣分了,驾照也能够加分,最高+21分!快来看怎么加...
想必大家知道交通违章行为会被扣分的,而且扣满了12分还要重新去学科一,更严重的还会吊销驾照,而我们知道开车上路难免会被扣分,一扣再一扣12分就没有了,很多车主都担心自己的分扣着扣着就扣完了.有驾照的朋 ...
- 蓝桥杯泊松分酒java_蓝桥杯-泊松分酒 - steven_wjg的个人空间 - OSCHINA - 中文开源技术交流社区...
泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...
- 三姬分金/四姬分金/五姬分金(海盗分金币)等经典博弈论问题
题目: A.B.C三人分100枚金币,按顺序提议. 规则:提议未获得半数以上(不包括半数)通过,则提议人被处死. 假如你是A,你会怎么提? 从后往前推 如果只剩下B.C 无论B怎么提议,C都不会同意, ...
- java实现第五届蓝桥杯海盗分金币
海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现 ...
- 2014年第五届蓝桥杯C/C++ A组国赛 —— 第一题:海盗分金币
标题:海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩 ...
- 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...
- 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结
蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...
最新文章
- php常见的类库-文件操作类
- ExtJS ComboBox 异步读取项后默认选中某项
- C++中string构造函数的解析
- 如何复制粘贴_年终工作总结如何写?复制粘贴肯定不行啦
- 飞机大作战游戏 1----(运用H5和Js制作)
- DLINK DES3828三层交换机配置实例
- 洛谷 【P1252】马拉松接力赛
- 力扣- -阶乘函数后K个零
- 依赖注入:一个Mini版的依赖注入框架
- 单硬盘上mac + win7双系统,GUID-GPT分区
- 利用用户级线程提高多线程应用的性能
- Python客户端syn连接
- Redis笔记(一)
- oracle 慕课课程_我在慕课网学习到的oracle
- python123第七周测验编程题答案_Python第七周编程题
- XML Drawable
- 关于解决IAR安装卸载后无法再次破解的问题
- 迪士尼机器人芭蕾舞_迪士尼“跳跳虎”机器人来了!
- LibGDX_2.1: LibGDX 应用框架(6 大系统交互接口)
- 路就在脚下,请勇敢的迈步。-----(对未来职业期望)
热门文章
- linux ulimit命令 控制shell执行程序的资源
- php文件之间相互引用路径问题的一般处理方法
- GetLastError编号含义
- SMB文件共享及用户权限使用配置
- templateref html内容,angular之ng-template模板加载
- PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
- 不区分大小写比较Java_java-如何使字符串比较不区分大小写?
- r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...
- linux软中断的实现
- 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)试题12.ppt...