PAT (Advanced Level) Practice 1002

本文提供了两种解决1002A+BforPolynomials问题的C++代码实现,一种使用三个数组分别存储两个输入多项式及它们的和,另一种则使用单个数组进行操作。两篇题解均适用于浙大PTA甲级英文版1002题,通过对比,可以了解不同实现方式的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1002 A+B for Polynomials (25分)

题目自行查看浙大PTA 甲级(English)1002
题目为简单模拟,难度不大,此处提供两种思路,编译器是g++ 6.5.0,C++编译器,头文件包含cstdio(不推荐写stdio.h)
个人擅长用C解题,过程中习惯用scanf和printf而不是cin 和 cout(速度上前两者快得多)

										 题解1
#include <cstdio>
double a1[1001],a2[1001],a3[1001]; // 三个double类型数组(静态存储区自动初始化为0)
int main()
{
    int k,count = 0,ex; // count用于计项数
    double co;
    
    scanf("%d", &k);
    while(k--){
        scanf("%d%lf", &ex,&co);
        a1[ex] = co;
    }
    scanf("%d", &k);
    while(k--){
         scanf("%d%lf", &ex,&co);
        a2[ex] = co;
    }
    for(int i = 0;i < 1001;i++){
        if(a1[i]+a2[i] != 0)
            ++count;
        a3[i] = a1[i]+a2[i];
    }
    printf("%d",count);
    for(int i = 1000;i >= 0 && count;i--){
        if(a3[i] != 0){
            printf(" %d %.1f", i,a3[i]);
        }
    }
    
    return 0;
}

该程序的缺点在于占用内存会更大,速度相对也慢一些,但三个数组使得我们对逻辑判断更明确

											题解2
#include <cstdio>
const int max = 1001;
double sum[max];
int main()
{
    int k,n,count = 0;
    double a;
    
    scanf("%d", &k);
    for(int i = 0;i < k;i++)
    {
        scanf("%d%lf", &n, &a);
        sum[n] += a;
    }
    scanf("%d", &k);
    for(int i = 0;i < k;i++)
    {
        scanf("%d%lf", &n, &a);
        sum[n] += a;
    }
    for(int i = 0;i < max;i++)
        if(sum[i])
            ++count;
    printf("%d", count);
    for(int i = max-1;i >= 0 && count;i--) // 判断条件加上count的目的是当count = 0时直接跳过循环节省时间
        if(sum[i])
            printf(" %d %.1f", i, sum[i]);
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值