您的位置:首页 > 编程语言 > Java开发

第八届蓝桥杯省赛JavaB组第3题

2018-03-12 21:24 302 查看
标题:承压计算X星球的高科技实验室中整齐地堆放着某批珍贵金属原料。每块金属原料的外形、尺寸完全一致,但重量不同。
金属材料被严格地堆放成金字塔形。                             7
                            5 8
                           7 8 8
                          9 2 7 2
                         8 1 4 9 1
                        8 1 8 8 4 1
                       7 9 6 1 4 5 4
                      5 6 5 5 6 9 5 6
                     5 5 4 7 9 3 5 5 1
                    7 5 7 9 7 4 7 3 3 1
                   4 6 4 5 5 8 8 3 2 4 3
                  1 1 3 3 1 6 6 5 5 4 4 2
                 9 9 9 2 1 9 1 9 2 9 5 7 9
                4 3 3 7 7 9 3 6 1 3 8 8 3 7
               3 6 8 1 5 3 9 5 8 3 8 1 8 3 3
              8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9
             8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4
            2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9
           7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6
          9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3
         5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9
        6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4
       2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4
      7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6
     1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3
    2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8
   7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9
  7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6
 5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X 其中的数字代表金属块的重量(计量单位较大)。
最下一层的X代表30台极高精度的电子秤。假设每块原料的重量都十分精确地平均落在下方的两个金属块上,
最后,所有的金属块的重量都严格精确地平分落在最底层的电子秤上。
电子秤的计量单位很小,所以显示的数字很大。工作人员发现,其中读数最小的电子秤的示数为:2086458231请你推算出:读数最大的电子秤的示数为多少?注意:需要提交的是一个整数,不要填写任何多余的内容。

程序:
package lqb8;

import java.util.Scanner;

public class l8_3 {

public static void main(String[] args) {
double min=999999999,max=0;
Scanner input=new Scanner(System.in);
double[][] a=new double[30][30];
for (int i = 0; i <29; i++) {
for(int j=0;j<=i;j++) {
a[i][j]=input.nextDouble();
}
}
for(int i=1;i<30;i++)
for(int j=0;j<30;j++) {
if(j==0) {
a[i][j]+=a[i-1][j]/2.0;
}else if(j==i) {
a[i][j]+=a[i-1][j-1]/2.0;
}
else {
a[i][j]+=a[i-1][j-1]/2+a[i-1][j]/2;
}
}
for(int j=0;j<30;j++) {
if(a[29][j]<min) {
min=a[29][j];
}if(a[29][j]>max) {
max=a[29][j];
}
}
System.out.println(min);
System.out.println(max);
System.out.println(2086458231/min*max);

}

}

解题思路:1.要计算第30行得重量有三种情况

     j==0  a[i][j]+=a[i-1][j]/2.0;     j==i  a[i][j]+=a[i-1][j]/2.0;    除这两种情况  a[i][j]+=a[i-1][j-1]/2.0;2.在for循环中输入得29行数据,故i从0-28  i<29

3.在计算得时候因为最终结果要第30行得数据,故0-30  i<304.在最后求最大最小值得时候,是第30行数据,有30列  i<30

5.用程序求出最大最小值还需要用方程利用已知得最小数据把电子称上得最大数据求出来问题:为什么直接求出来得不是最大最小值,就是利用每一行得重量得出得结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: