1002. A+B for Polynomials (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 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

方法一:

程序设计:

  构造一个包含1001个元素的数组,把输入的多项式的指数项当做数组的下标,系数项当做该下标对应元素的值

  **注意:系数项求和之后为0的项不显示

C++ 代码如下:

 #include <bits/stdc++.h>
using namespace std; int main(){
float num[];
for(int i=;i<;i++){
num[i]=0.0;
}
int m,n,temp1,count=;
float temp2;
cin>>m;
for(int i=;i<m;i++){
cin>>temp1>>temp2;
num[temp1]+=temp2;
}
cin>>n;
for(int i=;i<n;i++){
cin>>temp1>>temp2;
num[temp1]+=temp2;
}
for(int i=;i<;i++){
if(num[i]!=)
count++;
}
cout<<count;
for(int i=;i>=;i--){
if(num[i]!=)
cout<<' '<<i<<' '<<setiosflags(ios::fixed)<<setprecision()<<num[i];
}
system("pause");
}

C++ Code 1

方法二:

程序设计:

  使用标准模板库(STL)中的 map 容器

  关于 map :map 是用来存放 <key,value>  键值对的数据结构,key 和 value 一一对应,并且在map 中,key是唯一的

            1.在map中存入数据时,默认安装key的升序来存放

map<int,float> num; //默认按照key的升序排列存储数据,int,float分别为key和value的数据类型

        此题中将多项式的指数项作为key,系数项作为value进行存储,若最后按照key的降序进行打印输出时,可使用逆向迭代器来遍历map中的元素:

map<int,float>::reverse_iterator it;  //定义map的逆向迭代器
for(it=num.rbegin();it!=num.rend();it++){
if(it->second!=0)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<it->second;
}        

        其中:num.rbegin() :返回指向第一个元素的逆向迭代器

           num.rend() :返回指向最后一个元素的逆向迭代器

              it->first :表示map中 it 迭代器指向的元素的key值,等同于 (*it).first

              it->second:表示map中 it 迭代器指向的元素的value值,等同于 (*it).second

        2.将map存入数据时按照key的降序排列

map<int,float,greater<int> > num;  //按照key的降序来存储数据
// ^ 注意此处有空格

        这时,再打印多项式的指数项和系数项时可使用map的普通的迭代器:

map<int,float>::iterator it;  //普通的迭代器
for(it=num.begin();it!=num.end();it++){
if(it->second!=0)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision(1)<<it->second;
}

      

C++ 代码如下:

 #include <bits/stdc++.h>
using namespace std; int main(){
map<int,float,greater<int> > num;
int m,exp;
float coef;
for(int i=;i<;i++){
cin>>m;
for(int j=;j<m;j++){
cin>>exp>>coef;
num[exp]+=coef;
}
}
m=;
map<int,float>::iterator it;
for(it=num.begin();it!=num.end();it++){
if(it->second!=)
m++;
}
cout<<m;
for(it=num.begin();it!=num.end();it++){
if(it->second!=)
cout<<' '<<it->first<<' '<<setiosflags(ios::fixed)<<setprecision()<<it->second;
}
system("pause");
}

C++ Code 2 

【PAT】1002. A+B for Polynomials (25)的更多相关文章

  1. 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 po ...

  2. PAT 甲级1002 A+B for Polynomials (25)

    1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...

  3. 【PAT】B1075 链表元素分类(25 分)

    这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...

  4. 【PAT甲级】1002 A+B for Polynomials (25 分)

    题意:给出两个多项式,计算两个多项式的和,并以指数从大到小输出多项式的指数个数,指数和系数. AAAAAccepted code: #include<bits/stdc++.h> usin ...

  5. 【PAT】1002. 写出这个数 (20)

    1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...

  6. 【PAT】A1002 A+B for Polynomials

    仅有两个要注意的点: 如果系数为0,则不输出,所以输入结束以后要先遍历确定系数不为零的项的个数 题目最后一句,精确到小数点后一位,如果这里忽略了,会导致样例1,3,4,5都不能通过

  7. PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)

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

  8. 【PAT】B1080 MOOC期终成绩(25 分)

    还是c++好用,三部分输入直接用相同的方法, 用map映射保存学生在结构体数组中的下标. 结构体保存学生信息,其中期末成绩直接初始化为-1, 注意四舍五入 此题还算简单 #include<ios ...

  9. 【PAT】1005. 继续(3n+1)猜想 (25)

    1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...

随机推荐

  1. 根据数据库连接的java.sql.Connection获取数据库名称

    // 获取数据库的元数据信息 DatabaseMetaData metaData = conn.getMetaData(); // 获取数据库名称的方法 System.out.println(meta ...

  2. UESTC--1727

    原题链接:http://acm.uestc.edu.cn/problem.php?pid=1727 分析:用 l[i] 记录第 i 层楼有多少物品需要往上继续搬运,如果某层楼没有物品,但是更上面还有, ...

  3. 树莓派更改vnc分辨率

    参考链接:https://raspberrypi.stackexchange.com/questions/56421/how-to-increase-resolution-on-latest-rasp ...

  4. Uniform Distribution均匀分布

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...

  5. IIS最大并发连接数

    最大并发连接数 = 队列长度 + 工作线程数 [工作线程数] IIS实际可以第一时间处理的请求数.比如,工作线程数 = 100,一万个连接请求同时涌过来,那么只有100个可以被处理,其余9900个进入 ...

  6. linux shell学习五

    参考:https://www.linuxdaxue.com/ Shell函数 因为函数是脚本类语言,在执行时是逐行执行的,因此,Shell 函数必须先定义后使用. Shell 函数的定义格式如下: [ ...

  7. libcurl在mingw下编译

    通过命令提示符进入 curl-7.27.0 文件夹输入 mingw32-make mingw32 进行生成(这里我只需要普通的功能,于是没有加附加的选项)编译完成后,在 lib 文件夹中会有我们需要的 ...

  8. OpenCV---像素运算

    像素运算 分为算术运算和逻辑运算 算术运算: 加减乘除 调节亮度 调整对比度 逻辑运算: 与或非 遮罩层控制 一:算术运算 import cv2 as cv import numpy as np de ...

  9. word2vec 和 doc2vec 词向量表示

    Word2Vec 词向量的稠密表达形式(无标签语料库训练) Word2vec中要到两个重要的模型,CBOW连续词袋模型和Skip-gram模型.两个模型都包含三层:输入层,投影层,输出层. 1.Ski ...

  10. 分析nginx日志脚本之python

    为了对每个月的切割过的30个日志文件统计出访问最多的ip地址进行排序,整理了下面的脚本,主要思路是处理每一个日志文件的ip排序,最后进行字典合并,计算出月ip排序. #!/usr/bin/env py ...