香槟塔 [找出规律解题]

该博客主要介绍了如何使用Java编程实现香槟塔问题,即当香槟倒入杯子后,如何计算任意位置杯子的剩余容量,并处理溢出情况。通过双重循环遍历杯子,模拟香槟流动并更新每一层杯子的液面高度。最后返回指定位置的杯子剩余容量。

在这里插入图片描述

在这里插入图片描述

public static void main(String[] args) {
        System.out.println(champagneTower(5,2,0));
    }

    /**
     * @description:  poured倒了多少杯 query_row查那行那列的被子
     * @param: * @param: null
     * @return:
     * @author QLBF
     * @date: 2021/9/3 17:17
     */
    public static double champagneTower(int poured,int query_row,int query_glass){
        double[][] ca=new double[100][100];
        ca[0][0]=poured;  //初始化先给第一杯倒满
        for (int r = 0; r <= query_row; r++) {
            //遍历每一列,因为列号最多《=行号,见上面的图像 每行最多能倒行号数杯
            for (int l = 0; l <=r; l++) {
                double d=(ca[r][l]-1.0)/2;  //溢出的
                if (d>0){
                    //见上图分析
                    ca[r+1][l]+=d;
                    ca[r+1][l+1]+=d;
                }
            }
        }
        //因为下一步没算  溢出之前有可能超过1,最多取1就新
       return Math.min(1,ca[query_row][query_glass]);
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值