天天看點

PAT-----1009 Product of Polynomials(C++)

原題連結:

https://pintia.cn/problem-sets/994805342720868352/problems/994805509540921344

解答:

  1. #include<cstdio>
  2. using namespace std;
  3. struct Node
  4. {
  5.     int exponent;
  6.     double coff;
  7. };
  8. int main()
  9. {
  10.     int num1,num2;
  11.     scanf("%d",&num1);
  12.     struct Node poly1[num1];
  13.     double result[2001]={0.0};
  14.     for(int i=0;i<num1;i++)
  15.     {
  16.         scanf("%d %lf",&poly1[i].exponent,&poly1[i].coff);
  17.     }
  18.     scanf("%d",&num2);
  19.     struct Node poly2[num2];
  20.     for(int i=0;i<num2;i++)
  21.     {
  22.         scanf("%d %lf",&poly2[i].exponent,&poly2[i].coff);
  23.     }
  24.     for(int i=0;i<num1;i++)
  25.     {
  26.         for(int j=0;j<num2;j++)
  27.         {
  28.             result[poly1[i].exponent+poly2[j].exponent] += poly1[i].coff*poly2[j].coff;
  29.         }
  30.     }
  31.     int count=0;
  32.     for(int i=0;i<2001;i++)
  33.     {
  34.         if(result[i]!=0)
  35.         {
  36.             count++;
  37.         }
  38.     }
  39.     printf("%d",count);
  40.     for(int i=2000;i>=0;i--)
  41.     {
  42.         if(result[i] !=0)
  43.         {
  44.             printf(" %d %.1lf",i,result[i]);
  45.         }
  46.     }
  47.     return  0;
  48. }

思路:這一道題目思路很簡單,就是我們數學的多項式乘法整體思路是:首先定義結構體來存儲多項式結構,然後就是一個雙重循環進行乘法的運算,此處有一個小技巧,就是将數組的index預設為多項式的exponent,是以有了31行的寫法,非常簡單

     另外需要注意的是:要求有我們的最大的exponent為那麼乘積的結果最大為2000,是以定義數組的時候,定義大小為2001(血淚史),邊界需要極其注意!!!畢竟PAT需要自己想邊界條件.