一、题目描述
二、解释
A,B分别是两个多项式(polynomial),未知数是相同的,我们就把他们当成x吧。
题目要把A+B的结果输出,要求先输出非0项的个数,再输出每个非0项的指数Ni(exponent)和系数aNi(coefficient),用空格隔开,注意输出行末尾不要有空格,系数要求保留一位小数(accurate to 1 decimal place)
输入有两行 先输入K表示每行输入项数 然后输入k项
三、问题分析
题目中限制N<=1000,我们可以直接建立一个容量1001的浮点型数组po[1001],初始化为0,下标 i 代表x的指数,值代表该项的系数,每一项输入后可以直接把系数加到po[i]中。
为了输出有几个非0项,我们从0开始遍历数组po,记录非0项也就是po[i[ != 0 的项的数目。
为了从大到小输出非0项,我们从1000开始遍历数组po,遇到非0项就输出 i po[i]。
四、容易遇到的问题
1.输出格式
一行中每个数字之间用空格隔开,但是最后一个数字输出之后不要有空格
2.保留一位小数
fixed搭配setprecision(1)就可以保留一位小数了,其中setprecision()的头文件#include<iomanip>
cout<<fixed<<setprecision(1)<<po[i]
3.注意是非0项
注意判断po[i]!=0
AC代码
#include <iostream>
#include<iomanip>
using namespace std;
int main() {
int max_e = 0;
int k;
float po[1001] = { 0 };
long long ex;
float ak;
cin >> k;
for (; k > 0; k--) {
cin >> ex;
cin>> ak;
po[ex] += ak;
}
cin >> k;
for (; k > 0; k--) {
cin >> ex;
cin >> ak;
po[ex] += ak;
}
for (int i = 0; i < 1001; i++) {
if (po[i] != 0) {
max_e++;
}
}
cout << max_e ;
for (int i = 1000; i >=0; i--) {
if (po[i] != 0) {
cout <<" " << i << " " << fixed << setprecision(1) << po[i];
}
}
return 0;
}