zoukankan      html  css  js  c++  java
  • Product of Polynomials【PAT 1009题】

    题目链接:http://pat.zju.edu.cn/contests/pat-practise/1009

    这道题是前面A+B for Polynomials的升级版,求两个多项式的和,由于有前车之鉴,所以这道题我注意了结果为0的项,其实我是用了一个通用的方式来处理结果,所以提交的时候并没有被什么陷阱绊住,首先,A*B,两项系数相乘,指数相加,后面还有同样指数的项要合并,这样的处理符合逻辑但是操作起来比较麻烦,我首先算出A*B得到的最大指数是多少,存为max,然后开了一个大小为max + 1的c数组存结果,A*B时指数相加的和就是C的下标索引,这样就可以实现边乘边合并指数相同的项,而且初始化c数组中的系数项全为0,这样计算的时候得到的0项就和初始化时保持一样的状态,到最后算出C结果后,只用遍历其中的非0项,数出count,并按要求输出,即可AC。

     1 #include <stdio.h>
    2 #include <stdlib.h>
    3
    4 typedef struct
    5 {
    6 int expo;//指数
    7 double coef;//系数
    8 }poly;
    9
    10 int main()
    11 {
    12 int k1, k2;
    13 poly *a, *b;
    14 int i,j;
    15 int max;//能够出现的最大指数
    16 poly *c;
    17 int zhishu, xishu;
    18 int count;
    19
    20 while(scanf("%d", &k1) != EOF)
    21 {
    22 a = (poly *)malloc(k1 * sizeof(poly));
    23 for(i = 0; i < k1; i ++)
    24 {
    25 scanf("%d %lf", &a[i].expo, &a[i].coef);
    26 }
    27 scanf("%d", &k2);
    28 b = (poly *)malloc(k2 * sizeof(poly));
    29 for(i = 0; i < k2; i ++)
    30 {
    31 scanf("%d %lf", &b[i].expo, &b[i].coef);
    32 }
    33 max = a[0].expo + b[0].expo;
    34 c = (poly *)malloc((max + 1) * sizeof(poly));
    35 for(i = 0; i <= max; i ++)
    36 {
    37 c[i].expo = i;
    38 c[i].coef = 0;
    39 }//初始化结果
    40 for(i = 0; i < k1; i ++)
    41 {
    42 for(j = 0; j < k2; j ++)
    43 {
    44 zhishu = a[i].expo + b[j].expo;
    45 c[zhishu].coef += a[i].coef * b[j].coef;
    46 }
    47 }
    48 count = 0;
    49 for(i = 0; i <= max; i ++)
    50 {
    51 if(c[i].coef != 0)
    52 {
    53 count ++;
    54 }
    55 }
    56 printf("%d", count);
    57 for(i = max; i >= 0; i --)
    58 {
    59 if(c[i].coef != 0)
    60 {
    61 printf(" %d %.1lf", i, c[i].coef);
    62 }
    63 }
    64 printf("\n");
    65 }
    66 return 0;
    67 }



  • 相关阅读:
    php自动跳转中英文页面
    如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
    彻底杜绝warning: Cannot add header information headers already sent in......
    大三了
    X牛人關於編程語錄
    C++虚函数表解析
    epoll:Edge or Level Triggered
    LRU和LFU的区别
    会话、进程组与僵死进程
    Effective C++学习笔记:确定基类有虚析构函数
  • 原文地址:https://www.cnblogs.com/Rafy/p/2403196.html
Copyright © 2011-2022 走看看