首先,看到题目给出的数据,知道输入数据只能整体输入,不然一个一个输入太浪费时间了。
所以利用java去空格的方法去掉空格,在将每一行作为一个字符串输入,在利用字符串转为字符数组的方法转换,注意:unicode编码实际上十进制0位unicode值的48
然后由题目的信息,依次迭代算出最后一行的值,
算出最后XX那一行的值求出最大最小值,因为不知道秤值和实际求的的值的比例用最小值处于给出的最小秤值
在用那个比率乘以最大值
开始我发现算出来的值与给出的最小值没有明显的对应关系,但应该也是一个考点吧。
代码如下。
import java.util.Scanner;
public class third {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String[] a=new String[29];
int k=0;
char [][] result=new char[29][29];
double [][] resultInt=new double[29][29];
for(int i=0;i<29;i++) {
a[i]=scan.nextLine().trim();
result[i]=a[i].toCharArray();
for(Character x:result[i]) {
if(!x.equals(' ')){
resultInt[i][k++]=(int)x-48;//,unicode编码48为0
}
}
k=0;
}
new third().count(resultInt);
}
private void count(double [][] a) {
for(int row=0;row<28;row++) {
for(int col=0;col<=row;col++) {
a[row+1][col]+=a[row][col]*0.5;
a[row+1][col+1]+=a[row][col]*0.5;
}
}
int k=0;
double[] res=new double[30];//类里面定义的基本数据类型时会直接初始化的,不放心的同学可以将数组初始化为0.0
for(double x:a[28]) {
res[k]+=x/2;
res[k+1]+=x/2;
k++;}
double indexMin=100000000;
double indexMax=0;
for(double n:res) {
if(n>indexMax)
indexMax=n;
if(n
indexMin=n;
}
System.out.println("max:"+indexMax+"min:"+indexMin);
System.out.println((2086458231/indexMin)*indexMax);
}
}