PAT 1002

1002. A+B for Polynomials (25)

This time, you are supposed to find A+B where A and B are two polynomials.

Input

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.

Output

For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

Sample Input
2 1 2.4 0 3.2 2 2 1.5 1 0.5 
Sample Output
3 2 1.5 1 2.9 0 3.2 

注意对相加后系数为0的处理。


代码

 1 #include <stdio.h>
 2 
 3  int main()
 4 {
 5      int k1,k2;
 6      double d_arr1[ 10],d_arr2[ 10],d_arr3[ 20];
 7      int i_arr1[ 10],i_arr2[ 10],i_arr3[ 20];
 8      int i,j,k;
 9      while(scanf( " %d ",&k1) != EOF){
10          for(i= 0;i<k1;++i)
11             scanf( " %d%lf ",&i_arr1[i],&d_arr1[i]);
12         scanf( " %d ",&k2);
13          for(i= 0;i<k2;++i)
14             scanf( " %d%lf ",&i_arr2[i],&d_arr2[i]);
15         i =  0;
16         j =  0;
17         k =  0;
18          while(i < k1 && j < k2){
19              if (i_arr1[i] == i_arr2[j]){
20                 i_arr3[k] = i_arr1[i];
21                 d_arr3[k] = d_arr1[i++] + d_arr2[j++];
22                  if (d_arr3[k] !=  0.0)
23                     ++k;
24             }
25              else  if (i_arr1[i] > i_arr2[j]){
26                 i_arr3[k] = i_arr1[i];
27                 d_arr3[k++] = d_arr1[i++];
28             }
29              else{
30                 i_arr3[k] = i_arr2[j];
31                 d_arr3[k++] = d_arr2[j++];
32             }
33             
34         }
35          for (;i<k1;++i){
36             i_arr3[k] = i_arr1[i];
37             d_arr3[k++] = d_arr1[i];
38         }
39          for (;j<k2;++j){
40             i_arr3[k] = i_arr2[j];
41             d_arr3[k++] = d_arr2[j];
42         }
43         printf( " %d ",k);
44          for(i= 0;i<k;++i){
45             printf( "  %d %.1f ",i_arr3[i],d_arr3[i]);
46         }
47         printf( " \n ");
48     }
49      return  0;
50     
51 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值