zoukankan      html  css  js  c++  java
  • PAT甲级 1002 A+B for Polynomials (25)(25 分)

    1002 A+B for Polynomials (25)(25 分)

    This time, you are supposed to find A+B where A and B are two polynomials.

    Input

    Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 a~N1~ N2 a~N2~ ... NK a~NK~, where K is the number of nonzero terms in the polynomial, Ni and a~Ni~ (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10,0 <= NK < ... < N2 < N1 <=1000.

    Output

    For each test case you should output the sum of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate to 1 decimal place.

    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

    1002.多项式A与B的和

    这次,假设A和B是两个多项式,求A与B的和多项式。

    输入

    每个输入文件包含一个测试实例。每个实例有两行,每行包含一个多项式的信息: K N1 aN1 N2 aN2 ... NK aNK,其中K为多项式中非0项的个数,Ni 和 aNi (i=1, 2, ..., K) 分别为指数和系数。数的范围是1 <= K <= 10,0<= NK < ... < N2 < N1 <=1000。

    输出

    对于每个测试实例,你需要在一行内输出A与B的和,格式与输入时相同。注意每行的结尾不能有多余的空格。小数精确到一位。


    多项式求和
    可能会有负数
    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    using namespace std;
    double a[1005];
    bool b[1005];
    struct node
    {
        int x;
        double y;
    };
    int main()
    {
        int n,m;
        int max=0;
        while(cin>>n)
        {
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            int s=0;
            max=0;
            for(int i=1;i<=n;i++)
            {
                int x;
                double y;
                cin>>x>>y;
                a[x]+=y;
                if(x>max) max=x;
                if(!b[x])
                {
                    b[x]=1;
                }
            }
            cin>>m;
            for(int i=1;i<=m;i++)
            {
                int x;
                double y;
                cin>>x>>y;
                a[x]+=y;
                if(x>max) max=x;
                if(!b[x])
                {
                    b[x]=1;
                }
            }
            queue<node>q;
            while(!q.empty ()) q.pop();
            for(int i=max;i>=0;i--)
            {
                if(a[i]!=0)
                {
                    node p;
                    p.x=i;
                    p.y=a[i];
                    q.push (p);
                    s++;
                }
            }
            cout<<s;
            while(!q.empty ())
            {
                node p=q.front();
                q.pop();
                printf(" %d %.1lf",p.x,p.y);
            }
            cout<<endl;
            
        }
        return 0;
    
    }
     
  • 相关阅读:
    MOOK学习
    寒假学习计划
    三位影响深刻的老师
    软工第三次作业-结对作业
    2018软工实践第二次作业
    2018软工实践第一次作业
    简单的自我介绍
    福大软工1816 · 第一次作业
    课程作业八
    课程作业七
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/9270158.html
Copyright © 2011-2022 走看看