甲级PAT1002
程序员文章站
2022-06-07 14:39:05
...
多项式相加
该题从两个多项式的最高阶次开始找,阶次不同取高阶次的,同阶次把系数相加即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int n;
double a;
}s1[15],s2[15],s[30];
int main()
{
int k1,k2;
scanf("%d",&k1);
for(int i=1;i<=k1;i++)
scanf("%d %lf",&s1[i].n,&s1[i].a);
scanf("%d",&k2);
for(int i=1;i<=k2;i++)
scanf("%d %lf",&s2[i].n,&s2[i].a);
int l1=1,l2=1,l=1;
while(l1<=k1||l2<=k2)
{
if(l1>k1)
{
s[l].n=s2[l2].n;s[l].a=s2[l2].a;
l++;l2++;
continue;
}
if(l2>k2)
{
s[l].n=s1[l1].n;s[l].a=s1[l1].a;
l++;l1++;
continue;
}
if(s1[l1].n>s2[l2].n)
{
s[l].n=s1[l1].n;s[l].a=s1[l1].a;
l++;l1++;
}
else if(s1[l1].n<s2[l2].n)
{
s[l].n=s2[l2].n;s[l].a=s2[l2].a;
l++;l2++;
}
else
{
s[l].n=s2[l2].n;s[l].a=s1[l1].a+s2[l2].a;
if(s[l].a!=0)l++;
l1++;l2++;
}
}
l--;
printf("%d",l);
for(int i=1;i<=l;i++)
printf(" %d %.1f",s[i].n,s[i].a);
return 0;
}