

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

被折叠的 条评论
为什么被折叠?



