1002 A+B for Polynomials (25 分)题解
This time, you are supposed to find A+B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hf7KVGKG-1642034855992)(C:\Users\baixy\AppData\Roaming\Typora\typora-user-images\image-20220113083923804.png)]
where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10,0≤NK<⋯<N2<N1≤1000.
Output Specification:
For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
本题易错点
在合并同类项后,系数为零的项不要再加入到结果多项式中
//加入多项式或并合并同类项
if (treeMap.containsKey(exponent)){
Double remove = treeMap.remove(exponent);
double newCoefficient = remove + coefficient;
DecimalFormat decimalFormat = new DecimalFormat("#.#");
String formatOfNewCoefficient = decimalFormat.format(newCoefficient);
double finalCoefficient = Double.parseDouble(formatOfNewCoefficient);
// 此处注意!!!!系数为零不要再加入结果的多项式中!!!
if (finalCoefficient != 0) {
treeMap.put(exponent, finalCoefficient);
}
}else {
treeMap.put(exponent, Double.parseDouble(new DecimalFormat("#.#").format(coefficient)));
}
本题思路
1.构造一个排序为降序的TreeMap(TreeMap的排序默认为升序)
2.将Key映射为指数(exponent),将Value映射为系数(coefficient)
题目代码
package advanced;
import java.text.DecimalFormat;
import java.util.Comparator;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
/**
* This time, you are supposed to find A+B where A and B are two polynomials.
*/
public class Question1002 {
public static void main(String[] args) {
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
};
TreeMap<Integer, Double> treeMap = new TreeMap<>(comparator);
Scanner scanner = new Scanner(System.in);
int first = scanner.nextInt();//第一个多项式的非零项数
for (int i = 0; i < first; i++) {
int exponent = scanner.nextInt();//指数
double coefficient = scanner.nextDouble();//系数
coefficient = Double.parseDouble(new DecimalFormat("#.#").format(coefficient));
treeMap.put(exponent, coefficient);
}
int second = scanner.nextInt();//第二个多项式的费零项
for (int i = 0; i < second; i++) {
int exponent = scanner.nextInt();//指数
double coefficient = scanner.nextDouble();//系数
//加入多项式或并合并同类项
if (treeMap.containsKey(exponent)){
Double remove = treeMap.remove(exponent);
double newCoefficient = remove + coefficient;
DecimalFormat decimalFormat = new DecimalFormat("#.#");
String formatOfNewCoefficient = decimalFormat.format(newCoefficient);
double finalCoefficient = Double.parseDouble(formatOfNewCoefficient);
// 此处注意!!!!系数为零不要再加入结果的多项式中!!!
if (finalCoefficient != 0) {
treeMap.put(exponent, finalCoefficient);
}
}else {
treeMap.put(exponent, Double.parseDouble(new DecimalFormat("#.#").format(coefficient)));
}
}
System.out.print(treeMap.entrySet().size());
for (Map.Entry<Integer, Double> entry : treeMap.entrySet()) {
System.out.print(" " + entry.getKey() + " " + entry.getValue());
}
}
}