【PAT】1002. A+B for Polynomials (25)
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)的更多相关文章
- 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 ...
- PAT 甲级1002 A+B for Polynomials (25)
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...
- 【PAT】B1075 链表元素分类(25 分)
这道题算有点难,心目中理想的难度. 不能前怕狼后怕虎,一会担心超时,一会又担心内存过大,直接撸 将三部分分别保存到vector 有意思的在于输出 分别输出第一个的add和num 中间输出nextadd ...
- 【PAT甲级】1002 A+B for Polynomials (25 分)
题意:给出两个多项式,计算两个多项式的和,并以指数从大到小输出多项式的指数个数,指数和系数. AAAAAccepted code: #include<bits/stdc++.h> usin ...
- 【PAT】1002. 写出这个数 (20)
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
- 【PAT】A1002 A+B for Polynomials
仅有两个要注意的点: 如果系数为0,则不输出,所以输入结束以后要先遍历确定系数不为零的项的个数 题目最后一句,精确到小数点后一位,如果这里忽略了,会导致样例1,3,4,5都不能通过
- 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 ...
- 【PAT】B1080 MOOC期终成绩(25 分)
还是c++好用,三部分输入直接用相同的方法, 用map映射保存学生在结构体数组中的下标. 结构体保存学生信息,其中期末成绩直接初始化为-1, 注意四舍五入 此题还算简单 #include<ios ...
- 【PAT】1005. 继续(3n+1)猜想 (25)
1005. 继续(3n+1)猜想 (25) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中 ...
随机推荐
- Android Studio常用的快捷键
罗列一些常用的快捷键 全局快捷键(比较重要的) ALT + ENTER 工程快速修复 CTRL + SHIFT + A 快速查找 CTRL + ALT + L (Win) 格式化代码(我的锁屏的快 ...
- (一)SVM原理
前言 本文开始主要介绍一下SVM的分类原理以及SVM的数学导出和SVM在Python上的实现.借鉴了许多文章,会在后面一一指出,如果有什么不对的希望能指正. 一. SVM简介 首先看到SVM是在斯坦福 ...
- 简单的并发服务器(多个线程各自accept)
基于之前讲述的简单循环服务器,做一个多个线程各自accept的服务器demo 由于多个线程各自accept,容易造成数据错误,需要在accept前后枷锁 先看下客户端 客户端创建socket,初始化服 ...
- 手脱PEncrypt 4.0
1.载入PEID PEncrypt 4.0 Gamma / 4.0 Phi -> junkcode [Overlay] 2.载入OD,没什么头绪,忽略所有异常,用最后一次异常法shift+F9运 ...
- P2596 [ZJOI2006]书架 && Splay 区间操作(三)
P2596 [ZJOI2006]书架 题目描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书, ...
- python学习笔记(十四)之字典
字典:是python中唯一的映射类型,字典中每一项都是由键-值对组成的项.字典中没有索引,只有键和值.键的类型可以是整型,变量或字符串. 创建和访问字典: >>> dict1 = { ...
- node连接数据库(express+mysql)
操作是在ubuntu系统的下环境,简单记录一下过程. 首先用apt-get安装数据库,键入命令 sudo apt-get install mysql-server , 一路回车,然后在一个界面设置一下 ...
- 微信小程序导航设置
"tabBar": { "backgroundColor": "#ffffff", "color": "#00 ...
- CRF++模板使用(转)
CRF++模板构建分为两类,一类是Unigram标注,一类是Bigram标注. Unigram和Bigram模板分别生成CRF的状态特征函数 和转移特征函数 .其中 是标签, 是观测序列, ...
- Tslib触摸屏官网【转】
转自:https://github.com/kergoth/tslib C library for filtering touchscreen events tslib consists of the ...