【问题描述】
一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为0。输入两组数对,每组以0 0作为结束,实现对两个多项式的加法并按降幂输出结果数对
【输入形式】
每行输入一个数对,以空格为分隔符,以0 0结束
【输出形式】
每行输出一个数对,以空格为分隔符
【样例输入】
5 12 3 8 1 2 15 5 0 10 0 0 3 12 30 1 15 5 0 0
【样例输出】
30 1 15 10 5 12 3 20 1 2 0 10
#include<bits/stdc++.h>
using namespace std;
struct math {
int x;//系数
int c;//次数
};
bool cmp(math a,math b) {
if(a.x!=b.x)
return a.x>b.x;
}
math m1[10000];
math m2[10000];
math m3[10000];//用来存储最后结果
int main() {
int a,b;
int sum1=0;
int sum2=0;
while(cin>>a>>b&&(a!=0||b!=0)) {
m1[sum1].x=a;
m1[sum1].c=b;
sum1++;
}
while(cin>>a>>b&&(a!=0||b!=0)) {
m2[sum2].x=a;
m2[sum2].c=b;
sum2++;
}
int k=0;
for(int i=0; i<sum1; i++) {
for(int j=0; j<sum2; j++) {
if(m1[i].x==m2[j].x) { //系数相等时
m1[i].c+=m2[j].c;
m2[j].x=0;
m2[j].c=0;//让他们相加过的化为0
}
}
}
int key=0;
for(int i=0; i<sum1; i++) {
if(m1[i].c!=0||m1[i].x!=0) {
m3[i].x=m1[i].x;
m3[i].c=m1[i].c;
key++;
}
}
for(int i=0; i<sum2; i++) {
if(m2[i].c!=0||m2[i].x!=0) {
m3[key].x=m2[i].x;
m3[key].c=m2[i].c;
key++;
}
}
sort(m3,m3+key,cmp);
for(int i=0; i<key; i++) {
if(m3[i].c==0)continue;//如果系数为0,就不输出了
cout<<m3[i].x<<' '<<m3[i].c<<endl;
}
}