题目自己翻译,具体介绍和解释在代码和注释里
import java.util.Scanner;
/**
本题满分解题
2项 系数2.4的指数为1 系数3.2的指数位0
2项 系数1.5的指数为2 系数0.5的指数位1
相加后的:
三项 指数为2的系数相加等1.5 指数为1的系数相加为2.9 指数为0的系数为3.2
注意:求系数时容易出现精度丢失 , 如 2.4 -0.5精度丢失
注意:结果坐标不是按从小到大排序,而是从大到小
*/
public class Main{
private static final int CONSTANT_ARRAY = 1001;
public static float[] floatArraysOne = new float[CONSTANT_ARRAY];
public static float[] floatArraysTwo = new float[CONSTANT_ARRAY];
public static float[] countFloat = new float[CONSTANT_ARRAY];
public static String string = new String();
public static Scanner scanner = new Scanner(System.in);
public static void main(String[] args){
int numberOfTerms = 0,index = 0;
//第1项存在numberOfTerms项系数指数
numberOfTerms = scanner.nextInt();
//第1项系数和指数
for(int i=0;i<numberOfTerms;i++){
index = scanner.nextInt();
floatArraysOne[index] += scanner.nextFloat();
}
//第2项存在numberOfTerms项系数指数
numberOfTerms=scanner.nextInt();
//第2项系数和指数
for(int i=0;i<numberOfTerms;i++){
index = scanner.nextInt();
floatArraysTwo[index] += scanner.nextFloat();
}
scanner.close();
int count = 0; //用作统计项数
for(int i = 0; i<countFloat.length;i++){
//将两项合并,根据坐标相加
countFloat[i] = floatArraysOne[i] + floatArraysTwo[i];
//表示当前坐标不为零时,进入统计
if((floatArraysOne[i] != 0 || floatArraysTwo[i] != 0) && countFloat[i] != 0){
count ++;
}
}
//注意等的结果要求,高坐标往低座标走向如 2->1->0 而不是 0->1->2
for(int i = countFloat.length-1;i>=0;i--){
if(countFloat[i]!=0){
//由于会出现精度丢失问题,所以要进行保留小数位
String str = String.format("%.1f",countFloat[i]);
string += " "+i+" "+str;
}
}
System.out.printf(count+""+string);
}
}