【问题描述】
一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为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
【my code】
#include <iostream>
using namespace std;
int main()
{
int a[100][2];
int i=0,j=0,m=0,n=0,k=0,s=0;
for(i=0;i<100;i++){ //第一组数对
for(j=0;j<2;j++){
cin>>a[i][j];
}
if(a[i][0]==0&&a[i][1]==0){ //第一组0
m=i;
break;
}
}
for(i=m;i<100;i++){ //第二组数对
for(j=0;j<2;j++){
cin>>a[i][j];
}
if(a[i][0]==0&&a[i][1]==0){ //遇到00,结束
n=i;
break;
}
}
for(j=0;j<n-1;j++){
for(k=j+1;k<n;k++){
if(a[j][0]==a[k][0]){
a[j][1]+=a[k][1]; //相等次数的,底数相加
a[k][0]=0;a[k][1]=0;
}
}
}
for(j=0;j<n-1;j++){
for(k=j+1;k<n;k++){
if(a[j][0]<a[k][0]){
s=a[j][0];
a[j][0]=a[k][0];
a[k][0]=s;
s=a[j][1];
a[j][1]=a[k][1];
a[k][1]=s;
}
}
}
for(j=0;j<n ;j++){
if(a[j][1]!=0){
cout<<a[j][0]<<' '<<a[j][1]<<endl;
}
}
return 0;
}
using namespace std;
int main()
{
int a[100][2];
int i=0,j=0,m=0,n=0,k=0,s=0;
for(i=0;i<100;i++){ //第一组数对
for(j=0;j<2;j++){
cin>>a[i][j];
}
if(a[i][0]==0&&a[i][1]==0){ //第一组0
m=i;
break;
}
}
for(i=m;i<100;i++){ //第二组数对
for(j=0;j<2;j++){
cin>>a[i][j];
}
if(a[i][0]==0&&a[i][1]==0){ //遇到00,结束
n=i;
break;
}
}
for(j=0;j<n-1;j++){
for(k=j+1;k<n;k++){
if(a[j][0]==a[k][0]){
a[j][1]+=a[k][1]; //相等次数的,底数相加
a[k][0]=0;a[k][1]=0;
}
}
}
for(j=0;j<n-1;j++){
for(k=j+1;k<n;k++){
if(a[j][0]<a[k][0]){
s=a[j][0];
a[j][0]=a[k][0];
a[k][0]=s;
s=a[j][1];
a[j][1]=a[k][1];
a[k][1]=s;
}
}
}
for(j=0;j<n ;j++){
if(a[j][1]!=0){
cout<<a[j][0]<<' '<<a[j][1]<<endl;
}
}
return 0;
}