原题地址
https://www.patest.cn/contests/pat-a-practise/1002
给出两个多项式的指数和系数(没有给出基数),将指数相同的多项式进行系数相加并输出每一项的系数和指数。
如a=2.4x1+3.2x0,b=1.5x2+0.5x1,因此a+b = 1.5x2+2.9x1+3.2x0
解题思路
用数组poly[exp]表示指数为exp的项前面的系数,输入后累加即可。
需要注意的是有些项可能正负相抵为0,因此输出前要判断哪些项需要输出。
AC代码
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1005;
double poly[maxn];
void Input(int n)
{
int exp;
double coeff;
for (int i = 0; i < n; ++i)
{
cin >> exp >> coeff;
poly[exp] += coeff; //对应指数项的系数
}
return;
}
int main()
{
//初始化系数
for (int i = 0; i <= 1000; ++i)
poly[i] = 0;
//输入A和B
int num;
for (int i = 0; i<2; ++i)
{
cin >> num;
Input(num);
}
//统计非零项,注意可能输入可能正负抵消为0
int non_zero = 0;
for (int i = 1000; i >= 0; --i)
{
if (poly[i] != 0)
non_zero++;
}
//输出
cout << non_zero;
for (int i = 1000; i >= 0; --i)
{
if (poly[i] != 0)
{
cout << ' ' << i;
printf(" %.1f", poly[i]);
}
}
cout << endl;
return 0;
}