1002. A+B for Polynomials (25)

来源:互联网 发布:汽车悬挂设计软件 编辑:程序博客网 时间:2024/06/05 03:43

1. 原题链接

1002. A+B for Polynomials (25)

2. 理解题目

通过指数(exp)和系数(coe)的形式输入两个多项式中系数不为0的项,且按照指数递减的顺序输入,求相加后的结果(也按照指数递减的顺序输出)。

3. 解题思路

[思路1]

定义结构体数组来保存多项式,结构体中exp记录指数,coe记录系数;声明结构体数组变量a[],b[],ans[]分别保存输入的两个多项式和结果多项式,此时a、b数组内的指数都是递减的;然后用p1,p2,p这三个"指针"指向三个数组的下标,比较p1和p2指向元素的指数:①如果相同,则系数相加,指数任取其一,保存进p所指的ans[]元素内;然后p,p1,p2都"指向下一个元素";②如果不同,将指数较大的元素保存到ans[]中,并将p和指数较大的对应的指针"指向下一个元素";

[思路2]

直接用double数组来存储多项式信息,下标(非负整数类型)存储exp,数组内容(double类型)存储coe;然后第二次输入多项式信息时,直接将系数加入以exp作为下标的数组内;最终输出系数不为0的项即可;

4. 注意点

①注意系数相加后可能为0;②解法2时,注意初始化数组为0;

5. AC代码

//watch out the coefficient of ans[i] may be zero//[解法1] #include<cstdio>const int maxn=1010;struct Node{    int exp;    double coe;}a[maxn],b[maxn],ans[maxn];int main(){    int len1,len2;    scanf("%d",&len1);    for(int i=0;i<len1;i++)         scanf("%d%lf",&a[i].exp,&a[i].coe);    scanf("%d",&len2);    for(int i=0;i<len2;i++)        scanf("%d%lf",&b[i].exp,&b[i].coe);    int p1,p2;int p;    for(p1=p2=0;p1<len1||p2<len2;){        if(a[p1].exp>b[p2].exp){            ans[p].exp=a[p1].exp;            ans[p].coe=a[p1].coe;            p++;p1++;        }        else if(a[p1].exp<b[p2].exp){            ans[p].exp=b[p2].exp;            ans[p].coe=b[p2].coe;            p++;p2++;        }        else{            ans[p].exp=a[p1].exp;            ans[p].coe=a[p1].coe+b[p2].coe;            p++;p1++;p2++;        }    }    int cnt=0;    for(int i=0;i<p;i++) if(ans[i].coe) cnt++;    printf("%d",cnt);    for(int i=0;i<p;i++){        if(ans[i].coe) printf(" %d %.1f",ans[i].exp,ans[i].coe);    }} //其实可以直接用 a[expo]= coe 来存储,然后直接相加coe,再统计非零系数cnt个数并按要求输出; //[解法2]#include<cstdio>const int maxn=1010;double ans[maxn]={0};int main(){    int k;int exp;double coe;    scanf("%d",&k);    for(int i=0;i<k;i++){        scanf("%d%lf",&exp,&coe);        ans[exp]=coe;    }     scanf("%d",&k);    for(int i=0;i<k;i++){        scanf("%d%lf",&exp,&coe);        ans[exp]+=coe;    }    int cnt=0;    for(int i=0;i<maxn;i++){        if(ans[i]) cnt++;    }    printf("%d",cnt);    for(int i=maxn-1;i>=0;i--){        if(ans[i]) printf(" %d %.1f",i,ans[i]);    }}
原创粉丝点击