• pat 1009(需回顾)


    Product of Polynomials (25)

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

    Input Specification:

    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 Specification:

    For each test case you should output the product 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 up to 1 decimal place.

    Sample Input

    2 1 2.4 0 3.2
    2 2 1.5 1 0.5
    

    Sample Output

    3 3 3.6 2 6.0 1 1.6

    这道题难倒不难,就是细节需要注意的多点,主要有两方面: 一,每一项插入以计算出的积时,有三个地方需要考虑,头 尾 中间;二 结果为零的需要删除节点
    View Code
      1 #include<stdio.h>
      2 struct node
      3 {
      4     int exponents;
      5     float coefficients;
      6 };
      7 struct Polynomials{
      8     int number;
      9     node items[15];
     10     Polynomials(){
     11         number = 0;
     12     }
     13 };
     14 struct product {
     15     int number;
     16     node items[105];
     17     product(){
     18         number = 0;
     19     }
     20 };
     21 void insertItem(product &a, const node &b)
     22 {
     23     int i,j;
     24     // a 为空
     25     if (a.number == 0)
     26     {
     27         a.items[0] = b ;
     28         a.number ++;
     29         return ;
     30     }
     31     // 插在末尾后面
     32     if (a.items[a.number-1].exponents> b.exponents)
     33     {
     34         a.items[a.number] = b;
     35         a.number++;
     36         return ;
     37     }
     38 
     39     //寻找插的位置
     40     for (i = a.number-1; i >= 0; i--)
     41     {
     42         if (a.items[i].exponents<b.exponents)
     43              continue;
     44         else
     45             break;    
     46     }
     47 
     48     //插在最前面
     49     if(i == -1){
     50         j = a.number-1;
     51 
     52         while(j>=0){
     53             a.items[j+1] =a.items[j];
     54             j--;
     55         }
     56         a.items[0] = b;
     57         a.number++;
     58         return ;
     59     }
     60 
     61     //插在中间
     62     if(a.items[i].exponents == b.exponents){
     63         
     64         a.items[i].coefficients+= b.coefficients ;
     65         //两项和为零
     66         if (a.items[i].coefficients == 0)
     67         {
     68             j = i;
     69             while (j < a.number -1)
     70             {
     71                 a.items[j] = a.items[j+1];
     72             }
     73             a.number --;
     74             return ;
     75         }
     76     }else{
     77         
     78         j = a.number-1;
     79 
     80         while (j>i)
     81         {
     82             a.items[j+1] =a.items[j];
     83             j--;
     84         }
     85 
     86         a.items[i+1] = b;
     87         a.number++;
     88         return ;
     89 
     90     }
     91 
     92 }
     93 void insert(product &a,const Polynomials & b){
     94     
     95     int i;
     96     // 初始化
     97     if(a.number == 0){
     98         a.number = b.number;
     99         for(i = 0; i < b.number; i++)
    100             a.items[i] = b.items[i];
    101         return ;
    102     }
    103     for (i = 0; i <b.number ; i++)
    104           insertItem(a, b.items[i]);
    105 
    106 }
    107 Polynomials p1,p2,p3;
    108 product  result;
    109 int main()
    110 {
    111     int i,j,k;
    112     int exponents;
    113     float coefficients;
    114     while (scanf("%d", &k) !=EOF){
    115     
    116     result.number = 0;
    117     p1.number = k;
    118     for (i =0; i<k;i++)
    119     {
    120         scanf("%d %f",&p1.items[i].exponents, &p1.items[i].coefficients);    
    121     }
    122 
    123 
    124     scanf("%d", &k);
    125     p2.number = k;
    126     for (i =0; i<k;i++)
    127     {
    128         scanf("%d %f",&p2.items[i].exponents, &p2.items[i].coefficients);    
    129     }
    130 
    131     p3.number =p1.number;
    132     for(i =0;i <p2.number ;i++){
    133 
    134         for (j =0; j<p1.number ;j++)
    135         {
    136             p3.items[j].exponents = p1.items[j].exponents + p2.items[i].exponents;
    137             p3.items[j].coefficients = p1.items[j].coefficients * p2.items[i].coefficients ;
    138         }
    139         insert(result, p3);
    140         
    141     }
    142 
    143     printf("%d", result.number) ;
    144     for (i = 0; i< result.number ;i++)
    145     {
    146         printf(" %d %.1f", result.items[i].exponents, result.items[i].coefficients);
    147     }
    148     
    149     }
    150     return 0;
    151 }
    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    HDU 1698 Just a Hook (线段树模板题-区间求和)
    spring定时任务详解(@Scheduled注解)
    spring定时任务(@Scheduled注解)
    java反射实现接口重试
    微信开发者工具在线调试
    消息队列应用场景
    Redis、Memcache和MongoDB的区别
    下拉框多选实现回显及sql
    MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法
    catch异常
  • 原文地址:https://www.cnblogs.com/graph/p/2983353.html
Copyright © 2020-2023  润新知