【每日蓝桥】45、一七年省赛Java组真题“承压计算”

你好呀,我是灰小猿,一个超会写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));
	}

}

输出样例:

 

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_44985880/article/details/115270220
今日推荐