题目:
思路:
1:其中的数字代表金属块的重量(计量单位较大) ==说明每个数字后面不一定有多少个0
2:假设每块原料的重量都十分精确地平均落在下方的两个金属块上,最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。==自上而下的元素每一个都/2的分给下两个元素
代码:
public class 承压计算 {
static long[][] a = new long[30][30];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long factor = 1;
// 1:循环30次 计算出2的30次方
for (long i = 0; i < 30; i++)factor<<=1;
// 2:存入数据
for (int i = 0; i < 29; i++) {
for (int j = 0; j <= i; j++) {
long b = sc.nextLong();
a[i][j]= b*factor;
}
}
// 3:自上而下的处理a[i][j]*f -->/2 计入a[i+1][j] a[i+1][j+1]
for (int i = 0; i < 29; i++) {
for (int j = 0; j <= i; j++) {
// 每个数都要*f 保证数据够大 然后/2 均分给下面2个元素
long half =a[i][j]/2;
a[i+1][j]+=half; // 行加+1 列不变 也就是当前元素的左下一个元素
a[i+1][j+1]+=half; // 行+1 列+1 代表当前元素的坐下和右下2个元素均分到half
}
}
// 对二维数组按第一列进行升序排序
Arrays.sort(a[29]);
// 发现最后的最小值是2086458231的倍数 /2 就是答案
System.out.print(a[29][0]/2+" ");
System.out.print(a[29][29]/2);
// System.out.print("72665192664");
}
}