Hnu.cg程序设计训练3.10多项式加法
【问题描述】
一个多项式可以表示为一组数对,数对中第一个数始终为整数,且唯一,表示多项式的次数,另一数表示为对应的系数且不为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
【思路说明】
本题也是 map 的基础用法,需要注意的是 map 键的自定义排序,还有要注意当系数为 0 (系数可正可负,累加后可能为 0)时不必输出其幂数。
【代码如下】
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct rule{//键 key 的自定义排序
bool operator()(int a,int b)
{
return a>b;
}
};
int main()
{
int a,b;//系数 b ,可正可负
map<int,double,rule> res;
for(int i=0;i<2;i++)
{
while(cin>>a>>b)
{
if(a==0&&b==0)break;
res[a]+=b;
}
}
map<int,double,rule>::iterator it;//map 的遍历
for(it=res.begin();it!=res.end();it++)
{
//系数为 0,就不必再输出
if(it->second==0)continue;
cout<<it->first<<" "<<it->second<<endl;
}
}