甲级PAT1002

这里写图片描述

多项式相加
该题从两个多项式的最高阶次开始找,阶次不同取高阶次的,同阶次把系数相加即可。

#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;
}

猜你喜欢

转载自blog.csdn.net/qq_43064271/article/details/82656121