你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:承压计算
X星球的高科技实验室中整齐地堆放着某批珍贵金属原料.
每块金属原料的外形、尺寸完全- -致,但重量不同.
金属材料被严格地堆放成金字塔形.
其中的数字代表金属块的重量(计量单位较大).
最下一层的X代表30台极高精度的电子秤.
假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上.
电子秤的计量单位很小,所以显示的数字很大.
工作人员发现,其中读数最小的电子秤的示数为: 2086458231
请你推算出:读数最大的电子秤的示数为多少?
注意:需要提交的是-一个整数,不要填写任何多余的内容.
解题思路:
本题主要是要理解题意,将金字塔变化成二维数组进行处理,每一行还都需要进行平分,
答案源码:
import java.util.Arrays; import java.util.Scanner; public class Year2017_Bt3 { static long [][] arr = new long[30][30]; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long factor = 1; for (int i = 0; i < 30; i++) { factor<<=1; } // 输入数据放入二维数组 for (int i = 0; i < 29; i++) { for (int j = 0; j <= i; j++) { long a = scanner.nextLong(); arr[i][j]=a*factor; } } // 循环处理1~N-1行 for (int i = 0; i < 29; i++) { for (int j = 0; j <= i; j++) { long ha = arr[i][j]/2; arr[i+1][j]+=ha; arr[i+1][j+1]+=ha; } } Arrays.sort(arr[29]); System.out.println(arr[29][0]); System.out.println(arr[29][29]); System.out.println(arr[29][29]/(arr[29][0]/2086458231)); } }
输出样例: