蓝桥承压计算 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);    //最小值*求得最大值/求得最小值
	}
	

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值