zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) Practise 1002 解题报告


    GitHub
    markdownPDF


    问题描述

    A+B for Polynomials (25)
    时间限制 400 ms
    内存限制 65536 kB
    代码长度限制 16000 B
    判题程序 Standard
    作者 CHEN, Yue
    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 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (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

    大意是:

    多项式加法

    共两行输入数据,每行输入数据包括:K N1 aN1 N2 aN2 ... NK aNK,其中K是在多项式非零项的数量,Ni和aNi分别是指数和系数。

    1<=K<=10,0<=NK<... < N2 < N1<=1000.


    解题思路

    1. 数组下标作为次数,数值存储系数和;
    2. 边读入边计算最终非零项个数。

    注意点:

    1. 系数和为0的项不计算在内;
    2. 输出结果不能有多余空格。

    代码

    错误版本

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
      int i,j,n,m,s,t;
      float a[1001],k;
      memset(a,0,sizeof(a));
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        a[j]=k;
      }
      t=n;
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        if (a[j]==0) t++; 
        a[j]+=k;
        if (a[j]==0) t--;
      }
      cout<<t<<' ';
      n=t; 
      t=0;
      for (i=1000;i>=0;i--)
      {
        if (a[i]!=0)
        {
            if (t<n)
            {
              printf("%d %.1f ",i,a[i]);
              t++;
            }
            else printf("%d %.1f",i,a[i]);
        }
      }
      return 0;
    } 
    

    评测结果为全部格式错误。经过检查,防止最后多出空格的做法错了 不应该偷懒。。t的初始值应该设为1,或改变if的判断条件。

    正确版本(用了更简便的输出)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int main()
    {
      int i,j,n,m,s,t;
      float a[1001],k;
      memset(a,0,sizeof(a));
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        a[j]=k;
      }
      t=n;
      cin>>n;
      for (i=0;i<n;i++)
      {
        cin>>j>>k;
        if (a[j]==0) t++; 
        a[j]+=k;
        if (a[j]==0) t--;
      }
      cout<<t;
      for (i=1000;i>=0;i--)
      if (a[i]!=0) printf(" %d %.1f",i,a[i]);
      return 0;
    } 
    

    提交记录

    错误版本

    此处输入图片的描述

    修改后

    此处输入图片的描述

  • 相关阅读:
    redis基础
    Django Meta
    Django Query
    Django FileFieldManage
    Django Managers管理器
    Django 模型
    Pytables h5py
    python 高级部分
    Python和HDF 5大数据应用
    是时候放弃pipeline 模型 ?
  • 原文地址:https://www.cnblogs.com/S031602240/p/6354108.html
Copyright © 2011-2022 走看看