1002. A+B for Polynomials (25)
2017-10-25 16:31
429 查看
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]); } }
相关文章推荐
- 【PAT】1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- [PAT]1002. A+B for Polynomials(25)
- pat 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- PAT (Advanced Level) 1002. A+B for Polynomials (25) 解题报告
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- PAT甲级-1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)
- 1002. A+B for Polynomials (25)