题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805526272000000
题目:
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
题目解读:
介绍多项式:例如:“1.5x0^2 + 3.5x10^1 ” 1.5就是底数coe, 2就是幂exp
输入的第一个整数k:当前多项式的项数,接着是第一项的幂,第一项的系数,第二项的……,以此类推。
代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
int exp; //指数
float coe; //系数
};
//按照指数大小从大到小进行排序
bool cmp(node a, node b){
return a.exp > b.exp;
}
int main(){
node a[25], b[25], ans[25];
int k1 = 0, k2 = 0;
scanf("%d", &k1);
for(int i = 0; i < k1; i++){
scanf("%d%f", &a[i].exp, &a[i].coe);
}
scanf("%d", &k2);
for(int i = 0; i < k2; i++){
scanf("%d%f", &b[i].exp, &b[i].coe);
}
//进行加法
int i = 0, j = 0, k = 0;
while(i < k1 && j < k2){
if(a[i].exp == b[j].exp){
if(a[i].coe + b[j].coe != 0){
ans[k].exp = a[i].exp;
ans[k].coe = a[i].coe + b[j].coe;
k++;
}
i++;
j++;
}else if(a[i].exp < b[j].exp){
ans[k].exp = b[j].exp;
ans[k].coe = b[j].coe;
j++;
k++;
}else if(a[i].exp > b[j].exp){
ans[k].exp = a[i].exp;
ans[k].coe = a[i].coe;
i++;
k++;
}
}
while(i < k1){
ans[k].exp = a[i].exp;
ans[k].coe = a[i].coe;
i++;
k++;
}
while(j < k2){
ans[k].exp = b[j].exp;
ans[k].coe = b[j].coe;
j++;
k++;
}
sort(ans, ans + k, cmp);
printf("%d", k);
for(int i = 0; i < k; i++){
printf(" %d %.1f", ans[i].exp, ans[i].coe);
}
return 0;
}