1002 A+B for Polynomials (25 point(s))

1002 A+B for Polynomials (25 point(s))

题意:

给出两个多项式a, b,输出a+b的新多项式

思路:

1.只需用一个double数组,边存输入边计算得到新多项式

2.输出时,用一个计数器来累加非零项,一个容器来存待输出多项式的指数(可以通过一开始的double数组获得其系数)

注意点:

1.计算项数时要注意正负项指数相同,系数恰为相反数的情况,这时会得到零项(对于某些写法有问题),而对于这种写法只要注意控制输出格式就可以了。

2.最后一个样例就是得到了一个零多项式,此时应该输出0,后面无空格

AC代码:

 1 #include <cstdio>
 2 #include <vector>
 3 using namespace std;
 4 const int MAXN = 1000 + 5;
 5 double a[MAXN];// 下标是指数,映射为系数
 6 int k1, k2; // 多项式a,b的项数 
 7 // 读取输入,一共有k项 
 8 void get_poly(int k) { 
 9     for (int i = 0; i < k; i++) {
10         int expon;
11         double coef;
12         scanf("%d %lf", &expon, &coef);
13         a[expon] += coef; // 边读边计算 
14     }
15 }
16 void solve() {
17     int count = 0; // 记录结果多项式的项数
18     vector<int> ans_expon; // 存输出,便于控制输出格式 
19     for (int i = 1000; i >= 0; i--) {
20         if (a[i] != 0) {
21             count++;
22             ans_expon.push_back(i);
23         }
24     }
25     // 开始输出
26     printf("%d", count); // 输出时要小心若为0多项式,则只输出1个0 
27     for (int i = 0; i < count; i++) {
28         printf(" %d %.1f", ans_expon[i], a[ans_expon[i]]);
29         if (i == count - 1) {
30             printf("\n");
31         }
32     } 
33 }
34 
35 int main() {
36     // 读取两个多项式(一边读一边做加法) 
37     scanf("%d", &k1);
38     get_poly(k1);
39     scanf("%d", &k2);
40     get_poly(k2);
41     // 为了控制输出格式, 存储并打印结果 
42     solve();
43     
44     return 0;
45 }

猜你喜欢

转载自www.cnblogs.com/Shiko/p/10807954.html