蓝桥承压计算 JAVA数组暴解

X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。

每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。

                                                  7 
                                                 5 8 
下不要看下面的图,这道题的意思为:7分成23.5,分给了585分成22.58分成24,依次类推……OK有了这个思路,再往下做题会好很多。                          

假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
电子秤的计量单位很小,所以显示的数字很大。

工作人员发现,其中读数最小的电子秤的示数为:2086458231
请你推算出:读数最大的电子秤的示数为多少?
笨笨有话说:
不断的除2,加到下面,除2,加到下面,… 不会浮点精度溢出吧?
歪歪有话说:
怕除不开还不好办, 把每个数字扩大一定的倍数不就好了。
答案:7.2665192664E10

public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		double[][] arr = new double[30][30];     // 一个数组的输入输出
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j <= i; j++) {
				arr[i][j] = scanner.nextDouble();
			}
		}
		for (int i = 0; i < 29; i++) {
			for (int j = 0; j <= i; j++) {       //下面三行是核心代码(划重点要考的!!!)
				double avg = arr[i][j] / 2.0;    // 每块原料的重量,平均落在下方的两个金属块上
				arr[i + 1][j] += avg;            // +1下一行(这个是固定第二行的)
				arr[i + 1][j + 1] += avg;        // 下一行,下一列(3行2列,然后以此类推)
			}
		}
		double min = arr[29][0];                 // 取出最大最小值
		double max = arr[29][0];                 
		for (int i = 0; i < 30; i++) {           // 下面判断一下输出就可
			if (arr[29][i] < min) {
				min = arr[29][i];
			}
			if (arr[29][i] > max) {
				max = arr[29][i];
			}
		}
		System.out.println(2086458231.0 * max / min);    //最小值*求得最大值/求得最小值
	}
	

小剧场:好好忍耐,不要沮丧,如果春天要来,大地会使它一点点完成。

发布了108 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43771695/article/details/104569382