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

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

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

  2. 蓝桥杯泊松分酒java_【蓝桥杯】泊松分酒

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

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

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

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

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

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

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

  6. 2019年 第10届 蓝桥杯 Java B组 决赛真题详解及小结

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

  7. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

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

  8. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  9. 2019年 第10届 蓝桥杯 Java B组 省赛真题详解及总结

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. 【收藏】万字综述,核心开发者全面解读PyTorch内部机制
  2. 马斯克:十年内可把人脑与AI计算机连接起来
  3. Linux磁盘分区管理(转载)
  4. mysql 的条件 if else_使用If else条件在mysql中选择列?
  5. Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)
  6. Java核心技术36讲
  7. 三种平摊分析的方法分别为_干货|电工必须学会的三极管电路分析方法
  8. 雨林木风win11 64位原版系统v2021.08
  9. MySQL的CSV引擎应用实例解析
  10. JAVA对map进行分组
  11. 修改帝国cms验证码 每个都不一样
  12. 详解YUV系列(二)--YUV422
  13. JS Map与JSON转换
  14. mysql高频面试题合集
  15. 股票开户天载钢铁等板块跌幅居前
  16. JAVA并发系列十九:深入理解ThreadLocal(三)–详解ThreadLocal内存泄漏问题
  17. 树莓派zero 2w i2c操作 rda5807收音机芯片记录(电台差转站点远程监听可行性探讨)
  18. win32.mak下载地址github
  19. 源码包安装Nginx(1.19.1),并配置Nginx,比如:用户认证,防盗链,虚拟主机,SSL等功能
  20. 2020年终总结——走在代码公益的路上

热门文章

  1. 超简单JS延迟5秒加载方法代码
  2. Burp Suite Professional 2023.1 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
  3. 会计的思考(15):华而不实的应收账款周转率
  4. 无法发帖或者回复? 点这里参看如何发帖和回帖
  5. 软件工程全面质量管理的思想体系
  6. 计算机网络原理2020年8,2020年自考计算机网络原理考前资料
  7. 能把音频转换成文字的软件推荐,快收藏起来
  8. iMeta科学编辑招聘启事(可居家办公,弹性工作)
  9. 炉温曲线系统MATLAB仿真,MATLAB作业——工业炉温控制系统为例教程.doc
  10. java教程孙鑫_[Java基础] 孙鑫老师JAVA无难事视频教程 最适合java入门学习打基础的课程 附源码...