PAT甲级 1002

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");
}

猜你喜欢

转载自blog.csdn.net/weixin_43317468/article/details/88558590