码迷,mamicode.com
首页 > 其他好文 > 详细

1002 A+B for Polynomials

时间:2018-08-30 14:25:10      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:遇到   代码量   相加   --   clu   ons   相同   exp   printf   

题意:模拟多项式相加。

思路:

方法1、建立一个结构体表示每一项。然后分别输入多项式a、b。由于输入的顺序是按照指数递减的,因此在执行a+b的时候,可以使用双指针法,当遇到指数相同的项数,将两者的系数相加。不过需要注意,系数之和为0的情况。

方法2、建立一个double p[N],初始化为0,其中p[exp]表示指数为exp的系数。每读入一项,只要执行p[exp] += coe;就好了。最后输出的时候,逆序输出,因为要求指数大的放前面。这一种方法代码量少很多。

代码1:

#include <cstdio>

struct Term{
    double coe;//系数
    int exp;//指数
}a[100],b[100],sum[100];

int main()
{
    //freopen("pat.txt","r",stdin);
    int ka,kb;
    scanf("%d",&ka);
    for(int i=0;i<ka;i++)
        scanf("%d%lf",&a[i].exp,&a[i].coe);
    scanf("%d",&kb);
    for(int i=0;i<kb;i++)
        scanf("%d%lf",&b[i].exp,&b[i].coe);
    int i=0,j=0,len=0;
    while(i<ka && j<kb){
        if(a[i].exp==b[j].exp){
            if(a[i].coe+b[j].coe==0){
                i++;
                j++;
                continue;
            }
            sum[len].exp=a[i].exp;
            sum[len].coe=a[i].coe+b[j].coe;
            len++;
            i++;
            j++;
        }else if(a[i].exp<b[j].exp){
            sum[len].exp=b[j].exp;
            sum[len].coe=b[j].coe;
            len++;
            j++;
        }else{
            sum[len].exp=a[i].exp;
            sum[len].coe=a[i].coe;
            len++;
            i++;
        }
    }
    while(i<ka){
        sum[len].exp=a[i].exp;
        sum[len].coe=a[i].coe;
        len++;
        i++;
    }
    while(j<kb){
        sum[len].exp=b[j].exp;
        sum[len].coe=b[j].coe;
        len++;
        j++;
    }
    printf("%d",len);
    for(int i=0;i<len;i++){
        printf(" %d %.1f",sum[i].exp,sum[i].coe);
    }
    return 0;
}

 

代码2:

#include <cstdio>
const int N = 1100;
int main()
{
    double p[N]={0};//p[exp]表示指数为exp的系数
    int k;
    int exp;//指数
    double cof;//系数
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d%lf",&exp, &cof);
        p[exp] += cof;
    }    
    scanf("%d",&k);
    for(int i=0;i<k;i++){
        scanf("%d%lf",&exp, &cof);
        p[exp] += cof;
    }        
    int count = 0;
    for(int i=0;i<N;i++){
        if(p[i] != 0) count++;
    }
    printf("%d",count);
    for(int i=N-1;i>=0;i--){
        if(p[i] != 0) printf(" %d %.1f",i, p[i]);
    }
    return 0;
}

 

1002 A+B for Polynomials

标签:遇到   代码量   相加   --   clu   ons   相同   exp   printf   

原文地址:https://www.cnblogs.com/kkmjy/p/9559642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!