最近疫情在家办公,足不出户,做做 PAT 的题。奉上【PAT甲级】JS 解题分析————第二篇。
原题
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: K N1 aN1 N2 aN2 ... NK aNK
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
原题翻译
计算多项式的和。
输入格式:每个样例有两行,每一行代表一个多项式,K是非零整数,Ni是指数,aNi是系数,K范围是1到10,NK范围是0到1000。
输出格式:多项式A和B的和,输出一行,格式与输入类似,行尾不可有空格。精确到小数点后一位。
解题
思路:
- 先遍历 A, 指数作为 key, 系数作为 value,存在 map 中。
- 类似的继续遍历 B,相同key 的 value 相加。(value 保留一位小数)
- map 按 key 的值排序。
注意事项:
- 输出要精确到小数点后一位,比如 0.2+0.1 为 0.30000000000000004,这种需要处理一下。
- 如果系数为 O,该项不输出,如 1 2 -1 和 1 2 1, 输出应为 0。
- 输出结果按指数降序来,如 2 1 2.9 2 1.5 这种输出不正确,应该为 2 2 1.5 1 2.9。
测试用例:
- input: 2 1 2.4 0 3.2 和 2 2 1.5 1 0.5; output 3 2 1.5 1 2.9 0 3.2
- input: 2 -1 0.2 0 3 和 2 2 1.5 -1 0.1; output: 3 -1 0.3 2 1.5 0 3.0
- input: 1 0 2.2 和 1 0 -2.2; output: 0
- input: 3 2 2.5 1 2.4 0 3.2 和 2 2 -2.5 1 0.5; output 2 1 2.9 0 3.2
代码:
const readline = require('readline');
rl = readline.createInterface({
input: process.stdin,
output