PAT甲级真题 1002. A+B for Polynomials

题目链接:https://www.patest.cn/contests/pat-a-practise/1002


题意:给我们两个多项式的每一位的指数和系数,让我们求解两个多项式的和。

题目给出的指数范围是0 ~ 1000,所以我们可以直接定义一个1000大小的数组来存储每一位的系数。最后我们再对每一位进行相加,再遍历一遍这个数组查看非0的位数,并将其打印出来。

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1005;
const double EPS = 1e-6;
double a[maxn], b[maxn];
int main() {
	int k1, k2;
	while(scanf("%d", &k1) != EOF) {
		memset(a, 0, sizeof(a));
		memset(b, 0, sizeof(b));
		for(int i=0; i<k1; i++) {
			int n;
			double m;
			scanf("%d%lf", &n, &m);
			a[n] = m;
		}
		scanf("%d", &k2);
		for(int i=0; i<k2; i++) {
			int n;
			double m;
			scanf("%d%lf", &n, &m);
			b[n] = m;
		}
		for(int i=0; i<=1000; i++) {
			a[i] = a[i] + b[i];
		}
		int num = 0;
		for(int i=1000; i>=0; i--) {
			if(abs(a[i] - 0) > EPS) num++;
		}
		printf("%d", num);
		for(int i=1000; i>=0; i--) {
			if(abs(a[i] - 0) > EPS) {
				printf(" %d %.1lf", i, a[i]);
			}
		}
		printf("\n");
	}
}

猜你喜欢

转载自blog.csdn.net/raalghul/article/details/79528059