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 }