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

一、可借鉴的

1. 尽量少的创建数组

算法笔记中的方法,没有必要开两个数组存储系数再进行处理,在读入第二个系数时就可以一边读一边处理了。

2. 结尾不输出空格时

用这种方法减少程序长度

  1. printf("%d",number);
  2. for(int i =2000;i>=0;i--){
  3. if(ans[i]!=0.0){
  4. printf(" %d %.1f",i,ans[i]);
  5. }
  6. }

二、代码

1. 算法笔记

  1. #include<cstdio>
  2. struct Poly{
  3. int exp;//指数
  4. double cof;//系数
  5. }poly[1001];//第一个多项式
  6. double ans[2001]
  7. int main(){
  8. int n,m,number = 0;
  9. scanf("%d",&n);
  10. for (int i = 0;i < n;i++)
  11. {
  12. scanf("%d %lf",&poly[i].exp,&poly[i].cof);
  13. }
  14. scanf("%d",&m);
  15. for(int i = 0;i < m;i++)
  16. {
  17. int exp;
  18. double cof;
  19. scanf("%d %lf",&exp,&cof);
  20. for(int j = 0;j<n;j++)
  21. {
  22. ans[exp+ploy[j].exp] += (cof*poly[j].cof);
  23. }
  24. }
  25. for (int i = 0;i<=2000;i++)
  26. {
  27. if(ans[i]!=0.0)number++;
  28. }
  29. printf("%d",number);
  30. for(int i =2000;i>=0;i--){
  31. if(ans[i]!=0.0){
  32. printf(" %d %.1f",i,ans[i]);
  33. }
  34. }
  35. return 0;
  36. }

2. 俺的代码

#include<cstdio>
int main(){
    double f1[1001] = {0},f2[1001] = {0},f3[2001] = {0.0};//f1、f2里分别存第一行和第二行的系数
    for(int i = 0;i<1001;i++)//初始化f1\f2\f3
    {
        f1[i] = 0;
        f2[i] = 0;
    }
    //for(int i = 0;i<2002;i++)//初始化f3
 //   {
    //    f3[i] = 0;
    //}
    int K1 = 0,K2 = 0;
    int k;
    double e;
    int count = 0;
    scanf("%d",&K1);
    for(int i = 0;i < K1;i++)
    {
        scanf("%d %lf",&k,&e);
        f1[k] = e;
        //printf("f1[%d] = %f\n",k,e);
    }

    scanf("%d",&K2);
    for(int i = 0;i < K2;i++)
    {
        scanf("%d %lf",&k,&e);
        f2[k] = e;
        //printf("f2[%d] = %f\n",k,e);
    }
    //合并f1和f2;
    for(int i = 0;i<1001;i++)
    {
        for(int j = 0;j<1001;j++)
        {
            f3[i+j] += f1[i]*f2[j];
            //if(f3[i+j]!=0.0)printf("f3[%d] = %f\n",i+j,f3[i+j]);
        }
    }

    for(int i = 0;i<=2000;i++)
    {
        if(f3[i]!=0.0)count++;
    }
    printf("%d ",count);
    for(int i = 2000;i>=0;i--)
    {
        if(f3[i]!=0){
            printf("%d %.1f",i,f3[i]);
            count--;
            if(count!=0)printf(" ");
        }
    }
}