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