PAT A1002

PAT 1002 A+B for Polynomials (25 分)

1002 A+B for Polynomials (25 分)

解题思路

       题目并不难,但是有一些需要注意的细节。首先把同类项相加,求出每一项的系数。注意在这个过程中,最高项的次数和最低项的次数都可能发生改变。甚至有可能所有项全部抵消。

AC代码

#include <cstdio>
#include <vector>
#include <unordered_set>
using namespace std;
const int maxn = 1001;
double out_put[maxn] = {0.0};
int maxi = -1, mini = maxn; // 记录最高项和最低项的次数
void add1(int n) {
    for (int i = 0; i < n; ++i){
		int e;
		double c;
		scanf("%d %lf", &e, &c);
        if (e > maxi && i == 0) maxi = e;
        if (e < mini && i == n - 1) mini = e;
        out_put[e] += c;
	}
}
int main() {
	int n1, n2;
	scanf("%d", &n1);
	add1(n1);
	scanf("%d", &n2);
	add1(n2);
	int num = 0;
	while(out_put[mini] == 0 && mini < maxn) mini++; // 不要忘记做保护性的判断,否则可能出现段错误
	while(out_put[maxi] == 0 && maxi >= 0) maxi--;
	for (int i = maxi; i >= mini; --i) {
		if (out_put[i] != 0) num++;
	}
	if (num == 0) printf ("0"); // 特判,如果不做,最后一个测试点无法通过;
	else 
	     printf("%d ", num);
	for (int i = maxi; i >= mini; --i) {
		if (out_put[i] != 0) {
			printf("%d ", i);
			printf("%.1f%s", out_put[i], i == mini ? "\n" : " ");
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/LinxRds/article/details/89032601