【机试备考】Day11-复数集合 | 运算符重载
题目
BUPT 2011 网研 ProblemB
一个复数(x+iy)集合,两种操作作用在该集合上:
1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;
2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;
最开始要读入一个int n,表示接下来的n行每一行都是一条命令。
输入描述
输入有多组数据。
每组输入一个n(1<=n<=1000),然后再输入n条指令。
输出描述
根据指令输出结果。
模相等的输出b较小的复数。
a和b都是非负数。
示例
输入
3
Pop
Insert 1+i2
Pop
输出
empty
SIZE = 1
1+i2
SIZE = 0
题解
复数的模=实部的平方+虚部的平方\sqrt{实部的平方+虚部的平方}实部的平方+虚部的平方
法1:cin读入串+vector作容器
- Pop操作:利用了
sort
函数,自定义排序规则cmp对复数集合进行排序,最后一个元素即为最大的复数,用pop_back()
直接删除,再输出vector的大小即可 - Insert操作:直接
push_back()
,再输出vector的大小
需要注意的是求复数的模时,截出的实部和虚部均为string类型,需要转成int
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
//string类型数字转int型
int str2int(string a)
{int res=0;for(int i=0;i<a.length();i++){res*=10;res+=a[i]-'0';}return res;
}
//自定义排序规则
bool cmp(string a,string b)
{//提取字符串中的实部和虚部,转换成int型string areal=a.substr(0,a.find('+'));int ar=str2int(areal);string breal=b.substr(0,b.find('+'));int br=str2int(breal);string aimg=a.substr(a.find('i')+1);int ai=str2int(aimg);string bimg=b.substr(b.find('i')+1);int bi=str2int(bimg);return ar*ar+ai*ai<br*br+bi*bi;
}
int main()
{int n;while(cin>>n){vector<string>cmpx;//复数集合for(int i=0;i<n;i++){string cmd;cin>>cmd;if(cmd=="Pop"){if(cmpx.size()==0)cout<<"empty"<<endl;else{//复数按从小到大排序,最后一个即为最大的复数sort(cmpx.begin(),cmpx.end(),cmp);cout<<cmpx[cmpx.size()-1]<<endl;cmpx.pop_back();cout<<"SIZE = "<<cmpx.size()<<endl;}}else if(cmd=="Insert"){string complex;cin>>complex;cmpx.push_back(complex);cout<<"SIZE = "<<cmpx.size()<<endl;}}}
}
法2:scanf读入数字+priority_queue作容器
- 为什么要改?
1.scanf 可以固定格式输入,这样就不用读入string以后人为分离实部和虚部,直接用scanf("%d+i%d",&a,&b)
分别读入a,b即可
【这道题强推!】
2.优先级队列 priority_queue默认大顶堆,重载运算符之后直接输出堆顶.top()
就是最大的复数,而不用每次调用sort函数
【需要排序的题强推!】
#include<iostream>
#include<queue>
#include<cstdio>
#include<string>
using namespace std;
//复数用结构体表示更方便
struct complex
{int real;//实部int img;//虚部int val;//模complex(int r,int i){real=r;img=i;val=r*r+i*i;}bool operator < (complex c) const{return val<c.val;}
};
int main()
{int n;while(cin>>n){priority_queue<complex>cmpx;//优先队列复数集合for(int i=0;i<n;i++){string cmd;cin>>cmd;if(cmd=="Pop"){if(cmpx.size()==0)cout<<"empty"<<endl;else{//输出大顶堆堆顶,再删除堆顶cout<<cmpx.top().real<<"+i"<<cmpx.top().img<<endl;cmpx.pop();cout<<"SIZE = "<<cmpx.size()<<endl;}}else if(cmd=="Insert"){int a,b;scanf("%d+i%d",&a,&b);cmpx.push(complex(a,b));cout<<"SIZE = "<<cmpx.size()<<endl;}}}
}
这里 scanf 其实是帮了挺大的忙,省了一大堆字符串转数字的操作
priority_queue 倒是没太大用,因为即使用 vector 也就是多 sort 一句话的事儿,而且似乎priority_queue更占内存
然后,记得,及时用结构体,比如这道题,会让整个代码的结构更清晰,写起来也更方便
【机试备考】Day11-复数集合 | 运算符重载相关推荐
- 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明
刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...
- 【C++】Complex复数类运算符重载(类的成员函数实现)
一.复数类运算符重载 <1>分类: 在c++中,有些运算符可以重载,有些不可以重载,详情见下图: 那么,一般用的比较多的有**+.-.*./.=.前置++,- -.后置++,- -.< ...
- C#——《C#语言程序设计》实验报告——泛型与集合——运算符重载
一.实验目的 掌握运算符重载. 掌握索引符的编写. 掌握常用非泛型集合类和集合类的使用: 掌握可空类型的使用 二.实验内容 (实验过程中编写的程序复制到本文件中,下课整理后上交) 运算符重载 复数包含 ...
- 2023 华为OD机试备考攻略 以及题库目录分值说明 考点说明 (A卷+ B卷)
文章目录 华为OD在线刷题OJ 华为题库 更新说明 支持的语言 题库目录 华为OD统一考试[A卷]题库-100分 华为OD统一考试[A卷]题库-200分 华为OD统一考试[B卷]题库-100分 华为O ...
- 机试备考——刷题攻略
为了准备保研的机试,在学习完常见算法后,开始了刷题!看了一些大佬的心得分享,总结了一下. 题目类型分为: 数组.字符串.高精度计算.排序.递推.递归.搜索与回溯.贪心算法.分治算法.动态规 ...
- C++ 复数类运算符重载
题目描述 定义一个复数类Complex,重载运算符"*","<<",">>",使之能够用于复数的乘法.输入.输出 m ...
- 2023 华为OD机试备考攻略 以及最新题库目录分值说明 考点说明
华为od机试题库
- 【机试备考】Day15-Special数 | 平方数立方数判断
题目 BUPT 2017 计算机 ProblemA 设一个正整数既是平方数又是立方数时,称之为Special数.输入包含多组测试用例,第一行输入测试数据的组数,接着在后续每行输入n的时候,请输出1到n ...
- 【机试备考】Day16-二进制数字翻转 | 二进制和十进制的相互转化
题目 BUPT 2018 计算机 ProblemA 输入数据组数t,每组数据输入一个十进制数x(0<x<2^32),将其二进制位反转(共32位),然后输出对应的十进制数 提示 2^32-1 ...
最新文章
- 电脑装机完没有efi_联想M910Q 黑苹果折腾系列③ Hackintosh opencore完善 EFI分享
- php根据数组某一字段排序,php如何根据数组中某一字段来实现排序
- 启动MySQL报错:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
- 第三次学JAVA再学不好就吃翔(part63)--String和int的相互转换
- 156万在校大学生!中国高校第一城诞生
- 大数据_MapperReduce_从CSV文件中读取数据到Hbase_测试---Hbase工作笔记0022
- python处理词项的停用词_词项邻近 停用词 词干还原
- 人工智能发展月报(2022年6月)
- 微信公众平台开发(一) 申请微信公众账号
- 系统管理类命令(一)
- TASK 5 ARP Cache Poisoning
- 使用CSS绘制几何图形(圆形、三角形、扇形、菱形等
- SQL学习_Sinno_Song_新浪博客
- 11. Container With Most Wate
- 祖玛游戏python
- java迷宫生成代码_maxe.java 源代码在线查看 - Java Maze 计算机自动生成迷宫 资源下载 虫虫电子下载站...
- 软件自动化测试图片,常见的机器视觉图像处理软件自动化检测软件介绍
- 几百行代码写个Mybatis,原理搞的透透的!
- 使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
- php100漏洞,phpyun人才管理系统V5.0 SQL注入漏洞分析
热门文章
- 搜题公众号怎么搭建制作(微信公众号查题搭建制作教程)
- hdu 6400 Parentheses Matrix
- python对接企业微信_Python对接企业微信会话内容存档功能的实践
- java商务英语_商务英语中如何表达“也许”
- Android studio 启动模拟器报错-Turn off Hyper-V
- 2017中国最好学科排名出炉:计算机科学与技术排名 北大没进前三?
- 如何通过github学生包认证(远程不在学校或在校但位置报错均可用)
- 经验分享丨计算机专业的女孩子比较合适做什么工作?
- QCC3040---htf文件修改
- 太平洋皇冠证券按照2015年第四季度的收入计算,列出了全球企业云服务收入最多的10家科技公司