[湖南大学程序设计实训训练作业三]12. 多项式加法

   声明:本站部分内容来自互联网,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

0

12. 多项式加法

  • 【问题描述】
  • 【输入形式】
  • 【输出形式】
  • 【样例输入】
  • 【样例输出】
  • 题解
    • 思路
    • 代码

【问题描述】

一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为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

题解

思路

  • 1.map存储,set去重,set要自定义一个排序规则
  • 注意:如果map存储值为0,就不输出

代码

#include
#include
#include
using namespace std;
/*************set的排序规则*******************/
bool cmp(int a,int b){return a>b;
}
int main(){int a,b,flag=0;map<int,int> m;set<int,bool(*)(int,int)> s(cmp);//改变排序规则,从大到小 while(cin>>a>>b){if(a==0&&b==0) {flag++;if(flag==2) break;}	if(m.find(a)!=m.end()){m[a]=m[a]+b;}else{m[a]=b;}s.insert(a);}for(set<int>::iterator it=s.begin();it!=s.end();it++){if(m[*it]!=0) cout<<*it<<" "<<m[*it]<<endl;//如果加法导致某项系数为0就不输出了 }return 0;
}