题目:
思路:
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");}
}