1.题目:
香槟塔
把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层。
从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了–此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟
现在当倾倒了非负整数杯香槟后,返回第i行j个玻璃杯所盛放的香槟占玻璃杯容积的比例(i和j都从O开始)
2.算法:
1.暴力算发
3.算法思路:
就是一个二维数组,
水流的方向是,他的下面一个杯子,和他右边下面的一个杯子。
代码:
/*************************************************
作者:She001
时间:2022/9/5
题目:香槟塔
把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层。
从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了–此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟
现在当倾倒了非负整数杯香槟后,返回第i行j个玻璃杯所盛放的香槟占玻璃杯容积的比例(i和j都从O开始)
算法:
1.暴力算发,
***************************************************/
#include<bits/stdc++.h>
using namespace std;
//
//算法:暴力算法
double fangfa_1(int n,int hang,int lie )// n 香槟的杯数,, 返回数据的行列 hang 行的坐标 lie 列的坐标
{
double num[100][100];//假设含有 99 层数据
num[1][1]=n;
for(int i=1;i<100;i++) //层数
{
for(int j=1;j<=i;j++)//每层的
{
if(num[i][j]>1)//满了,就把水往下流
{
double gg= num[i][j]-1;
num[i][j]=1;
num[i+1][j]+=gg/2;//上面 流下来的体积
num[i+1][j+1]+=gg/2;//上面 流下来的体积
}
}
}
return num[hang][lie];
}
int main()
{
double nn=fangfa_1(5,3,1);//有五杯水,看第三行,第一列,有多少水
cout<<nn<<endl;
return 0;
}