标题:承压计算
X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。
其中的数字代表金属块的重量(计量单位较大)。
最下一层的X代表30台极高精度的电子秤。
假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
电子秤的计量单位很小,所以显示的数字很大。
工作人员发现,其中读数最小的电子秤的示数为:2086458231
请你推算出:读数最大的电子秤的示数为多少?
注意:需要提交的是一个整数,不要填写任何多余的内容。
解题思路:可以用文件输入,算出最后一排每格子上重量,就是上面的格子的数字平分到下面两个格子中,每个格子也是压着下面一层的两个格子。因为不知道这个秤的计量单位,所以只能比值法求最大值在秤上显示的数字找到最后一排的最小值minn,和最大值maxn,得到ans/maxn = 2086458231/minn
#include<iostream>
#include<cstdio>
#include<fstream>
using namespace std;
double arr[35][35];
int main()
{
freopen("3in.txt", "r", stdin);
for(int i=1; i<30; ++i){
for(int j=1; j<=i; ++j){
cin >> arr[i][j];
}
}
fclose(stdin);
for(int i=1; i<30; ++i){
for(int j=1; j<=i; ++j){
arr[i+1][j] += arr[i][j]/2.0;
arr[i+1][j+1] += arr[i][j]/2.0;
}
}
double maxn=arr[30][1], minn = arr[30][1];
for(int i=2; i<=30; ++i){
maxn = max(maxn, arr[30][i]);
minn = min(minn, arr[30][i]);
}
printf("%lf", 2086458231.0/minn*maxn);
return 0;
}