一.题目
二.分析
∙ \bullet ∙ 题目的大概意思就是首先给出两行的输入,每行的第一个数据代表后面有几项多项式,每队都由次数和系数组成,我们最后就是要将相同的系数进行合并。然后返回格式与输入格式相同,但是注意次数要从高到底排序。
∙ \bullet ∙ 因为我搜到好多都是用数组做的,在这里我就给出一种使用STL容器map的方法。
∙
\bullet
∙ 我们使用的map格式如下:
m
a
p
<
i
n
t
,
f
l
o
a
t
>
m
p
map<int,float>mp
map<int,float>mp
在遍历数据的过程中,如果该次数已经用map记录过,那么直接将系数相加即可,否则则将该项加入map。最后要注意按格式输出,相应的注释已经补充在代码中。
三.代码
#include<iostream>
#include<vector>
#include<map>
#include<iomanip>
using namespace std;
int main()
{
int n=0,a=0;
float b=0;
map<int,float>mp;
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>a>>b;
//如果map中没有该项则加入,否则将系数相加
if(!mp.count(a)) mp[a]=b;
else mp[a]+=b;
//如果系数为0,那么直接删去这一项
if(mp[a]==0) mp.erase(a);
}
}
//如果最后多项式相加得到0,那么直接返回0
if(mp.size()==0) {cout<<0;return 0;}
cout<<mp.size()<<" ";
int res=0;
//因为map默认从小到大排序,所以我们倒序输出
for(auto it=mp.rbegin();it!=mp.rend();it++)
{
res++;
cout<<it->first<<" ";
cout<<fixed<<setprecision(1)<<it->second;
//注意给出格式里面的空格位置
if(res!=mp.size()) cout<<" ";
}
return 0;
}