浙大PAT甲级 A1002 A+B for Polynomials(类似多指针)

14 篇文章 0 订阅
这篇博客详细介绍了如何用C/C++实现两个多项式的相加,关注于处理相同幂次项的系数相加以及如何控制循环结束。代码中设置三个指针分别对应A、B和A+B的系数数组,通过比较系数和指数来合并项,当系数和为0时则忽略该项。此外,还特别提到了特殊情况,即同幂次项相加后系数为0的处理方式。
摘要由CSDN通过智能技术生成

PAT - A1002 A+B for Polynomials (25分) https://pintia.cn/problem-sets/994805342720868352/problems/994805526272000000
题目

关键点:
  1. 注意两同幂次项相加 系数和为0时 该幂次项不要输出的特殊情况;
  2. 何时退出做运算的循环、如何实现控制,需要仔细考虑,且其与数组最小长度的取值相关(可用代码后附的数据做断点调试,观察三个“指针”值的变化);
通过代码(C/C++):
#include<stdio.h>
int main(){
    double coef_AB[2][12]={{}}, coef_res[20]={};    // A、B与A+B的各项系数
    int expo_AB[2][12]={{}}, expo_res[20]={};   // A、B与A+B的各项指数
    // 上面A和B的系数与指数数组长度最小可取值为K的最大值10+1+1=12,并设初值0,关乎后续while循环的结束控制
    int K;
    for(int i=0;i<2;i++){
        scanf("%d", &K);
        for(int j=0;j<K;j++){
            scanf("%d%lf", &expo_AB[i][j], &coef_AB[i][j]);
        }
    }
    int i=0,j=0,k=0;    // 三个指针分别对应A、B、A+B的系数数组位置
    while(coef_AB[0][i]||coef_AB[1][j]){    // A、B两者系数均为0时即有效数据处理完毕,结束循环
        if(expo_AB[0][i]==expo_AB[1][j]){
            //相同幂次的项相加(其中有特殊情况:零次幂的项指数与空项指数默认值均为0,不过最多只会运算一次)
            expo_res[k]=expo_AB[0][i];
            coef_res[k]=coef_AB[0][i]+coef_AB[1][j];
            if(coef_res[k]){    // 该项系数和不为0,才存入结果
                k++;
            }
            i++;
            j++;
        }else if(expo_AB[0][i]>expo_AB[1][j]){
            // A的当前处理项幂次高于B的当前处理项,直接存入结果
            expo_res[k]=expo_AB[0][i];
            coef_res[k]=coef_AB[0][i];
            k++;
            i++;
        }else{
            // B的当前处理项幂次高于A的当前处理项,直接存入结果
            expo_res[k]=expo_AB[1][j];
            coef_res[k]=coef_AB[1][j];
            k++;
            j++;
        }
    }
    printf("%d", k);
    for(int i=0;i<20&&coef_res[i]!=0;i++){
        printf(" %d %.1f", expo_res[i], coef_res[i]);
    }
    return 0;
}

/*测试点2的可用测试数据
10 9 1.1 8 1.1 7 1.1 6 1.1 5 1.1 4 1.1 3 1.1 2 1.1 1 1.1 0 1.1
10 19 1 18 1 17 1 16 1 15 1 14 1 13 1 12 1 11 1 10 1
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值