面试算法 香槟塔 ,算法:暴力算法

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;
} 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值