PAT 甲级 1002
题目描述:多项式求和问题
输入两个多项式,输出和的多项式(多项式按指数递减排列)
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 2 1.5 1 2.9 0 3.2
解题思路:
由于多项式已经按指数递减排列,构造两个数组,存放输入多项式,然后对两个数组进行依次比较,放入第三个数组中。(与数据结构线性表一节中,合并两个递减表的操作一致)
#include<stdio.h>
#include<iostream>
#include<iomanip>
using namespace std;
typedef struct {
int expn; //指数
float coef; //系数
}Node;
int main() {
Node a[11], b[11], c[22];
int i, j, k=0;
cin >> i;
for (int q =1 ; q <= i; q++) {
//输入多项式一
cin >> a[q].expn >> a[q].coef;
}
cin >> j;
for (int q = 1; q <= j; q++) {
//输入多项式二
cin >> b[q].expn >> b[q].coef;
}
while (i&&j) {
//依次比较,较小的数放入放入数组C中
// i 从大到小,相当于数组 递增,所以取小值放入
if (a[i].expn < b[j].expn) { c[k] = a[i]; k++; i--; continue; }
else if (a[i].expn == b[j].expn) {
//两指数相等时,需进行判断,如果系数和为零,直接跳过
a[i].coef += b[j].coef;
if (a[i].coef) {
c[k] = a[i]; k++;
}
i--; j--;
continue;
}
else { c[k] = b[j]; k++; j--; continue;}
}
while (i)
{//添加剩余元素
c[k] = a[i]; k++; i--;
}
while (j)
{
c[k] = b[j]; k++; j--;
}
if (k) {
cout << k;
for (int p = k-1; p >=0; p--)
{//反向输出,既是递减序列
cout << ' ' << c[p].expn << ' ';
cout<< setiosflags(ios::fixed) << setprecision(1)<< c[p].coef;
}
}
else cout << 0;
system("pause");
}