概述
#include<iostream> #include<map> #include<string> #include<iomanip> using namespace std; int main(){ int flag=0; int num1=0; int i1=0; double d1=0; map<int,double> map1; while(true){ if(flag==0){ cin>>num1; } else{ cin>>i1>>d1; map1[i1]=d1; } if(flag==num1) break; flag++; } flag=0; int num2=0; int i2=0; double d2=0; map<int,double> map2; while(true){ if(flag==0){ cin>>num2; } else{ cin>>i2>>d2; map2[i2]=d2; } if(flag==num2) break; flag++; } map<int,double>::iterator iter1=map1.begin(); map<int,double>::iterator iter2=map2.begin(); map<int,double> map3; while(iter1!=map1.end() && iter2!=map2.end()){ if((*iter1).first > (*iter2).first){ map3[(*iter2).first]=(*iter2).second; iter2++; } else if((*iter1).first == (*iter2).first){ map3[(*iter2).first]=(*iter2).second + (*iter1).second; iter1++; iter2++; } else{ map3[(*iter1).first]=(*iter1).second; iter1++; } } for(;iter1!=map1.end();iter1++){ map3[(*iter1).first]=(*iter1).second; } for(;iter2!=map2.end();++iter2){ map3[(*iter2).first]=(*iter2).second; } for(map<int,double>::iterator iter3=map3.begin();iter3!=map3.end();){ if((*iter3).second == 0){ map3.erase(iter3++); } else ++iter3; } cout<<map3.size(); if(map3.size()!=0){ for(map<int,double>::iterator iter3=(--map3.end());;--iter3 ){ cout<<" "; cout<<(*iter3).first<<" "<<fixed<<setprecision(1)<<(*iter3).second; //单单使用setprecision(n)就是保留n个数,如果加fixed就是保留n位小数 ,四舍五入 if(iter3==map3.begin()) break; } } return 0; }
PAT1002个人感觉思路比较简单,没有什么复杂的算法思路,就是小坑多,比如:
1.如果A+B之后,系数为0的项要去掉
2.输出格式问题 ,保留一位小数(菜鸡如我,一开始还不知道不加fixed的话,保留的数字位数是指所有数字的位数,包含整数和小数的位数)
当然,我这里使用map来做,不熟悉STL的话用数组和下标来做应该也挺快的
转载于:https://www.cnblogs.com/chuan-chuan/p/11411013.html
最后
以上就是坚强保温杯为你收集整理的PAT1002的全部内容,希望文章能够帮你解决PAT1002所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复