2020-11-03刷题记录

刷题笔记—A1009(多项式乘积)

题目可自行查看官网描述

思路:
1.每一个多项式用一个数组来存储,数组索引表示指数,元素值表示系数。根据题目要求,所以至少要开1001个元素大小的数组。
2.在多项式相乘可用嵌套循环来实现。注意在相乘的过程中要排除零项。
3.结果也用一个数组存储,不过该数组至少要开到2001个大小。因为极端情况是指数为1000的两项相乘。
4.输出,由于是按指数从大到小输出,所以倒叙输出即可,同样需要排除零项。同时要提前计数,即需要一个循环统计结果多项式有多少个。

代码:

#include

int main(){
    double p1[1001]={0};      //存储第一个多项式
    double p2[1001]={0};      //存储第二个多项式
    double r[2001] = {0};     //用于存储结果
    int n,e;
    int i,j;
    int count=0;
    int num=0;
    scanf("%d",&n);
    while(n>0){
        scanf("%d",&e);
        scanf("%lf",&p1[e]);         //读入每一个多项式的内容
        n--;
    }
    scanf("%d",&n);
    while(n>0){
        scanf("%d",&e);
        scanf("%lf",&p2[e]);
        n--;
    }
    for(i=0;i<1001;i++){               //使用该嵌套循环进行乘法运算
        for(j=0;j<1001;j++){
            if(p1[i]*p2[j] != 0){
                r[i+j] += p1[i]*p2[j];
            }
        }
    }
    for(i=0;i<2001;i++){
        if(r[i] != 0)count++;         //统计个数
    }
    if(count==0)printf("%d",count);
    else{
        printf("%d ",count);
        for(i=2000;i>=0;i--){  
            if(r[i] != 0){
                printf("%d ",i);
                printf("%.1f",r[i]);
                num++;
                if(num<count)printf(" ");    //在输出最后一个时,后面不需要空格
            }
        }
    }
    return 0;
}

总结:
该题主要就是考察了数组这种数据结构的应用。没有什么其他特别的地方,一步步来就好。不过要注意的是输出末尾不能有多余的空格,这个要注意,这是我第一次写的,所以最后的处理有点麻烦了。

另一种解法:(刷题笔记上的解法,比较简洁,精炼)
直接上代码:

#include
struct Poly{
int exp;     //指数
int cof;     //系数   
}poly[1001];   //用于存储第一个多项式

double ans[2001];  //用于存放结果多项式
int main(){
int n,m,number-0;
scanf("%d",&n);  //记录第一个多项式的项数
for(int i=0;i<n;i++){
scanf("%d %lf",&poly[i].exp,&poly[i].cof);    //记录第一个多项式的指数和系数
}
scanf("%d",&m);
for(int i=0;i<m;i++){
int exp;
double cof;
scanf("%d %lf",&exp,&cof);  // 第二个多项式的指数和系数
for(int j=0;j<n;j++){
ans[exp+poly[j].exp] += cof*poly[j].cof;
}
}
for(int i = 0;i <= 2000;i++){
if(ans[i] != 0.0) number++;       //统计结果项数
}
printf("%d",number);
for(int i=2000;i>=0;i--){
if(ans[i] != 0.0){
printf(" %d %.1f",i,ans[i]);
}
}
return 0
}

思路分析:
该题用结构体数组存储系数和指数,第二个多项式不用另外开数组来存储,因为只需要得到最后的结果就行了。因此在进行第二次输入的时候就可以每输入一项,就与第一个多项式相乘。在乘的时候就比第一种方法好了,因为第一种方法遍历整个数组,而该方法不用。最后输出也没必要像第一种
那样那么的麻烦了。不过还是要对具体的题目仔细分析(最后的输出不能有多余的空格)

你可能感兴趣的:(刷题,算法,数据结构)