题目

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作容器

  1. Pop操作:利用了sort函数,自定义排序规则cmp对复数集合进行排序,最后一个元素即为最大的复数,用pop_back()直接删除,再输出vector的大小即可
  2. 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-复数集合 | 运算符重载相关推荐

  1. 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明

    刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...

  2. 【C++】Complex复数类运算符重载(类的成员函数实现)

    一.复数类运算符重载 <1>分类: 在c++中,有些运算符可以重载,有些不可以重载,详情见下图: 那么,一般用的比较多的有**+.-.*./.=.前置++,- -.后置++,- -.< ...

  3. C#——《C#语言程序设计》实验报告——泛型与集合——运算符重载

    一.实验目的 掌握运算符重载. 掌握索引符的编写. 掌握常用非泛型集合类和集合类的使用: 掌握可空类型的使用 二.实验内容 (实验过程中编写的程序复制到本文件中,下课整理后上交) 运算符重载 复数包含 ...

  4. 2023 华为OD机试备考攻略 以及题库目录分值说明 考点说明 (A卷+ B卷)

    文章目录 华为OD在线刷题OJ 华为题库 更新说明 支持的语言 题库目录 华为OD统一考试[A卷]题库-100分 华为OD统一考试[A卷]题库-200分 华为OD统一考试[B卷]题库-100分 华为O ...

  5. 机试备考——刷题攻略

      为了准备保研的机试,在学习完常见算法后,开始了刷题!看了一些大佬的心得分享,总结了一下.   题目类型分为:   数组.字符串.高精度计算.排序.递推.递归.搜索与回溯.贪心算法.分治算法.动态规 ...

  6. C++ 复数类运算符重载

    题目描述 定义一个复数类Complex,重载运算符"*","<<",">>",使之能够用于复数的乘法.输入.输出 m ...

  7. 2023 华为OD机试备考攻略 以及最新题库目录分值说明 考点说明

    华为od机试题库

  8. 【机试备考】Day15-Special数 | 平方数立方数判断

    题目 BUPT 2017 计算机 ProblemA 设一个正整数既是平方数又是立方数时,称之为Special数.输入包含多组测试用例,第一行输入测试数据的组数,接着在后续每行输入n的时候,请输出1到n ...

  9. 【机试备考】Day16-二进制数字翻转 | 二进制和十进制的相互转化

    题目 BUPT 2018 计算机 ProblemA 输入数据组数t,每组数据输入一个十进制数x(0<x<2^32),将其二进制位反转(共32位),然后输出对应的十进制数 提示 2^32-1 ...

最新文章

  1. 电脑装机完没有efi_联想M910Q 黑苹果折腾系列③ Hackintosh opencore完善 EFI分享
  2. php根据数组某一字段排序,php如何根据数组中某一字段来实现排序
  3. 启动MySQL报错:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)
  4. 第三次学JAVA再学不好就吃翔(part63)--String和int的相互转换
  5. 156万在校大学生!中国高校第一城诞生
  6. 大数据_MapperReduce_从CSV文件中读取数据到Hbase_测试---Hbase工作笔记0022
  7. python处理词项的停用词_词项邻近 停用词 词干还原
  8. 人工智能发展月报(2022年6月)
  9. 微信公众平台开发(一) 申请微信公众账号
  10. 系统管理类命令(一)
  11. TASK 5 ARP Cache Poisoning
  12. 使用CSS绘制几何图形(圆形、三角形、扇形、菱形等
  13. SQL学习_Sinno_Song_新浪博客
  14. 11. Container With Most Wate
  15. 祖玛游戏python
  16. java迷宫生成代码_maxe.java 源代码在线查看 - Java Maze 计算机自动生成迷宫 资源下载 虫虫电子下载站...
  17. 软件自动化测试图片,常见的机器视觉图像处理软件自动化检测软件介绍
  18. 几百行代码写个Mybatis,原理搞的透透的!
  19. 使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
  20. php100漏洞,phpyun人才管理系统V5.0 SQL注入漏洞分析

热门文章

  1. 搜题公众号怎么搭建制作(微信公众号查题搭建制作教程)
  2. hdu 6400 Parentheses Matrix
  3. python对接企业微信_Python对接企业微信会话内容存档功能的实践
  4. java商务英语_商务英语中如何表达“也许”
  5. Android studio 启动模拟器报错-Turn off Hyper-V
  6. 2017中国最好学科排名出炉:计算机科学与技术排名 北大没进前三?
  7. 如何通过github学生包认证(远程不在学校或在校但位置报错均可用)
  8. 经验分享丨计算机专业的女孩子比较合适做什么工作?
  9. QCC3040---htf文件修改
  10. 太平洋皇冠证券按照2015年第四季度的收入计算,列出了全球企业云服务收入最多的10家科技公司