【PAT甲级】1002 A+B for Polynomials

问题:

这一次,你要找到A+B,其中A和B是两个多项式(Polynomials)。


输入规范:每个输入文件包含一个测试案例。每个案例占2行,每行包含一个多项式的信息。

K \quad N_{1} \quad a_{N_{1}} \quad N_{2} \quad a_{N_{2}} \ldots N_{K} \quad a_{N_{K}}

其中K是多项式中非零项的数量,N_{i}  和 a_{N_{i}} 分别是指数和系数。给定

1 \le K \le 10        0 \le N_{K}<\cdots<N_{2}<N_{1}\le1000


输出规范:对于每个测试案例,你应该在一行中输出A和B的总和,其格式与输入相同。注意,每行的末尾不能有多余的空格。请精确到小数点后1位。

Sample Input:

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output:

3 2 1.5 1 2.9 0 3.2

思路:

一开始没看懂,题目意思应该是将指数相同的系数相加,每一项是a_{N_{i}}乘10的N_{i}次方。因此可以开一个1000大小的数组a,i表示指数,a[i]=j表示该指数下的系数。首先想到的方法是:第一组数遍历数组按该格式存储,第二组数按同样方式存储,同一个指数下系数相加。最后倒叙输出系数不为0的项。

#include<stdio.h>

int main(){
    //k是输入项数,index是指数,coef是系数
    int k1,k2,index;
    float coef;
    float group[1001]={0};//创建数组a[i]=j,i是指数,j是系数
    scanf("%d", &k1);//输入第一组数
    for(int i=0;i<k1;i++){
        scanf("%d%f",&index,&coef);
        group[index]+=coef;
    }
    
    scanf("%d",&k2);//输入第二组数
    for(int i=0;i<k2;i++){
        scanf("%d%f",&index,&coef);
        group[index]+=coef;
    }
    
    int count=0;//结果个数
    for(int i=0;i<1001;i++){
        if(group[i]!=0)
            count++;  
    }
    printf("%d",count);
    
    for(int i=1000;i>=0;i--){
        if(group[i]!=0.0)
            printf(" %d %.1f",i,group[i]);//注意输出间的空格...
    }
    
    return 0;
    
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值