X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。
每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。
7
5 8
下不要看下面的图,这道题的意思为:7分成2个3.5,分给了5和8,5分成2个2.5,8分成2个4,依次类推……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); //最小值*求得最大值/求得最小值
}