题目链接:https://www.patest.cn/contests/pat-a-practise/1002
解题思路:这种多项式相加的题很常见,这个算是比较基础的吧。记住两点,如果数据比较小,像这道题一样,则使用数组下标来表示指数;如果指数数据比较大而且离散的比较严重,这种情况就只能用链表了,相当于归并两个链表一样。
这道题用的数组下标表示指数,很简单。

#include <cstdio>
#include <cstring>
const int maxn = 1005;
int main(){
    int k,exp,m;
    double arr[maxn],brr[maxn];
    memset(arr,0,sizeof(arr));
    memset(brr,0,sizeof(brr));
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d",&exp);
        scanf("%lf",&arr[exp]);
    }
    scanf("%d",&m);
    for(int i=0;i<m;i++){
        scanf("%d",&exp);
        scanf("%lf",&brr[exp]);
    }
    int cnt =0;
    for(int i=1000;i>=0;i--){
        arr[i]+=brr[i];
        if(arr[i]!=0){
            cnt++;
        }
    }
    printf("%d",cnt);
    for(int i=1000;i>=0;i--){
        if(arr[i]!=0){
            printf(" %d %.1f",i,arr[i]);
        }
    }
    printf("\n");
    return 0;
}