含避坑指南
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
代码实现:
#include<iostream>
using namespace std;
int main(){
int K1,K2;
cin>>K1;
double A[K1][2];
for(int i=0;i<K1;i++){
cin>>A[i][0];
cin>>A[i][1];
}
cin>>K2;
double B[K2][2];
for (int i=0;i<K2;i++){
cin>>B[i][0]>>B[i][1];
}//输入
int max_count=K1+K2;
double C[max_count][2];//结果最大的情况为A与B无指数相同
int a=0;
int b=0;
int c=0;
while(a<K1&&b<K2){ //指数相同相加 否则往后移一格
if (A[a][0]==B[b][0]){
C[c][0]=A[a][0];
C[c][1]=A[a][1]+B[b][1];
a++;b++;
if(C[c][1]!=0)c++; //系数为0,舍弃
}
else if (A[a][0]>B[b][0]){
C[c][0]=A[a][0];
C[c][1]=A[a][1];
a++;
if(C[c][1]!=0)c++;
}
else{
C[c][0]=B[b][0];
C[c][1]=B[b][1];
b++;
if(C[c][1]!=0)c++;
}
}
if(a==K1){ //b还有剩余的没有相加
for(int i=b;i<K2;i++){
C[c][0]=B[i][0];
C[c][1]=B[i][1];
if(C[c][1]!=0)
c++;
}
}
if(b==K2){
for(int i=a;i<K1;i++){
C[c][0]=A[i][0];
C[c][1]=A[i][1];
if(C[c][1]!=0)
c++;
}
}
cout<<c;
for(int i=0;i<c;i++){
cout<< " " <<C[i][0]<<" ";
printf("%.1f",C[i][1]); //格式化输出
}
}
1. 输出格式:
输出的多项式系数应保留一位小数。
2. 示例:
1 2 -1.0
1 2 1.0
结果应为:
0
而不是:
1 2 0.0
因此,多项式系数为0的一项应舍掉。