分析:
令 double 型数组 p [ ] p[] p[] 表示多项式,其中 p [ n ] p[n] p[n] 表示 幂次为 n n n 的项的系数,初值为 0 0 0。令 int 型变量 c n t cnt cnt 表示系数非零项的个数,初值为 0 0 0。先按输入格式读入第一个多项式,再读入第二个多项式,并把对应系数直接加到第一个多项式上。计算非零数项的个数 c n t cnt cnt 并输出,然后按格式输出该多项式。
本题要注意的一点是:我们不在读入的过程中使用 c n t cnt cnt 计数,因为有正负相消的问题。两个多项式的某一个相同的幂次刚好为相反数,相加后就为 0 0 0了。
另外,在输出每一个非零系数项时,必须注意幂次为 1000 1000 1000 是可以取到的,所以循环的最大值至少要取到 1000 1000 1000,并且 p p p 数组的大小至少是 1001 1001 1001。
代码(C++)
#include <iostream>
using namespace std;
const int N = 1111;
double p[N];
int main()
{
int k, n, cnt = 0;
double a;
cin >> k;
for (int i = 0; i < k; i ++)
{
scanf("%d %lf", &n, &a); // 先输入指数后输入系数
p[n] += a;
}
cin >> k;
for (int i = 0; i < k; i ++)
{
cin >> n >> a;
p[n] += a;
}
for (int i = 0; i < N; i ++) if (p[i] != 0) cnt ++;
cout << cnt;
for (int i = N; i >= 0; i --)
{
if (p[i] != 0) printf(" %d %.1f", i, p[i]);
}
}