PAT (Advanced Level) Practice 1002

1002 A+B for Polynomials (25分)

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

										 题解1
#include 
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 
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;
}

你可能感兴趣的:(PTA(A),c++,c语言)