/*  * 有一群海盗(不多于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]海盗分酒相关推荐

  1. [蓝桥杯][java]海盗分酒

    /*  * 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复......   * 直到开了第4瓶酒,坐着的 ...

  2. 统计扣分加分java_再也不怕违章扣分了,驾照也能够加分,最高+21分!快来看怎么加...

    想必大家知道交通违章行为会被扣分的,而且扣满了12分还要重新去学科一,更严重的还会吊销驾照,而我们知道开车上路难免会被扣分,一扣再一扣12分就没有了,很多车主都担心自己的分扣着扣着就扣完了.有驾照的朋 ...

  3. 蓝桥杯泊松分酒java_蓝桥杯-泊松分酒 - steven_wjg的个人空间 - OSCHINA - 中文开源技术交流社区...

    泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...

  4. 三姬分金/四姬分金/五姬分金(海盗分金币)等经典博弈论问题

    题目: A.B.C三人分100枚金币,按顺序提议. 规则:提议未获得半数以上(不包括半数)通过,则提议人被处死. 假如你是A,你会怎么提? 从后往前推 如果只剩下B.C 无论B怎么提议,C都不会同意, ...

  5. java实现第五届蓝桥杯海盗分金币

    海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩上发现 ...

  6. 2014年第五届蓝桥杯C/C++ A组国赛 —— 第一题:海盗分金币

    标题:海盗分金币 有5个海盗,相约进行一次帆船比赛. 比赛中天气发生突变,他们被冲散了. 恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人. 第一个人在沙滩 ...

  7. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  8. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  9. 2017年 第08届 蓝桥杯 Java B组 决赛真题详解及小结

    ​​​​​蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 ...

最新文章

  1. php常见的类库-文件操作类
  2. ExtJS ComboBox 异步读取项后默认选中某项
  3. C++中string构造函数的解析
  4. 如何复制粘贴_年终工作总结如何写?复制粘贴肯定不行啦
  5. 飞机大作战游戏 1----(运用H5和Js制作)
  6. DLINK DES3828三层交换机配置实例
  7. 洛谷 【P1252】马拉松接力赛
  8. 力扣- -阶乘函数后K个零
  9. 依赖注入:一个Mini版的依赖注入框架
  10. 单硬盘上mac + win7双系统,GUID-GPT分区
  11. 利用用户级线程提高多线程应用的性能
  12. Python客户端syn连接
  13. Redis笔记(一)
  14. oracle 慕课课程_我在慕课网学习到的oracle
  15. python123第七周测验编程题答案_Python第七周编程题
  16. XML Drawable
  17. 关于解决IAR安装卸载后无法再次破解的问题
  18. 迪士尼机器人芭蕾舞_迪士尼“跳跳虎”机器人来了!
  19. LibGDX_2.1: LibGDX 应用框架(6 大系统交互接口)
  20. 路就在脚下,请勇敢的迈步。-----(对未来职业期望)

热门文章

  1. linux ulimit命令 控制shell执行程序的资源
  2. php文件之间相互引用路径问题的一般处理方法
  3. GetLastError编号含义
  4. SMB文件共享及用户权限使用配置
  5. templateref html内容,angular之ng-template模板加载
  6. PHP 中华如何用命令连接数据库,选择MySQL数据库的命令以及PHP脚本下的操作方法...
  7. 不区分大小写比较Java_java-如何使字符串比较不区分大小写?
  8. r语言导入ggplot2_R语言 可视化之三大绘图系统概述:base、lattice和ggplot2 | 第7讲...
  9. linux软中断的实现
  10. 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)试题12.ppt...