1023 组个最小数 (20 分)
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,
Niand 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 |
---|
题目大概
每个输入文件包含一个测试用例。每个case占用2行,每一行包含一个多项式的信息:K N1 aN1 N2 aN2 … NK aNK
其中K是多项式中非零项的个数,N~ i~和a Ni (i=1,2, K)分别是指数和系数。1≤K≤10,0≤NK<⋯<N2<N1≤1000。
做题思路
创建一个数组m[i]来存储的指数和系数。令i 为指数,m[i]为该指数对应的系数。
注意
这道题写了好久,陷在一个圈中出不来了,参考了其他大佬的解题,换了一种思路才搞出来的。
1.系数可以为负;
2.系数要保留一位小数,我测试时发现java中float类型 2.4+(-0.5)=1.9000001 为了避免这种情况,需要设定结果保留一位小数,这里我使用了String.format("%.1f",m[i]);
3.注意K是多项式中非零项的个数,,如果系数和相加为0的话,此项是不输出的!!!
这些坑我都踩了…
完整代码展示
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);//输入
int A = input.nextInt();
float m[] = new float[1001];
for(int i=0;i<1001;i++) {
m[i]=0;
}
for(int i=0;i<A;i++) {
int mm = input.nextInt();
m[mm] += input.nextFloat();
}
int B = input.nextInt();
int sum = 0;
for(int i=0;i<B;i++) {
int qq = input.nextInt();
m[qq] += input.nextFloat();
}
for(int i=1000;i>=0;i--) {
if(m[i]!=0) {
sum++;
}
}
System.out.print(sum);
for(int i=1000;i>=0;i--) {
if(m[i]!=0) {
System.out.print(" "+i+" "+String.format("%.1f",m[i]));
}
}
}
}