您的位置:首页 > 其它

九度OJ题目1178:复数集合

2015-02-25 03:03 239 查看
题目1178:复数集合

时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:7339

解决:1345

题目描述:

一个复数(x+iy)集合,两种操作作用在该集合上:

1、Pop 表示读出集合中复数模值最大的那个复数,如集合为空 输出 empty ,不为空就输出最大的那个复数并且从集合中删除那个复数,再输出集合的大小SIZE;

2 Insert a+ib 指令(a,b表示实部和虚部),将a+ib加入到集合中 ,输出集合的大小SIZE;

最开始要读入一个int n,表示接下来的n行每一行都是一条命令。

输入:

输入有多组数据。

每组输入一个n(1<=n<=1000),然后再输入n条指令。

输出:

根据指令输出结果。

样例输入:
3
Pop
Insert 1+i2
Pop


样例输出:
empty
SIZE = 1
1+i2
SIZE = 0


提示:

模相等的输出b较小的复数。

a和b都是非负数。

来源:2011年北京邮电大学网院研究生机试真题

答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7901-1-1.html

#include <stdio.h>
#include <algorithm>
#include <string.h>

using namespace std;

//我们要猥琐的混用C和C++的输入输出模式,以便我们更方便的解题,本题就是一个
//因使用scanf而方便的题目
//注意此题当中对输入的处理
struct number
{
int a;
int b;
int m;
bool operator < (const number &A) const{
if(m!=A.m)
return m>A.m;
else
return b<A.b;
}
}num[1010];

char s[100];
int main()
{
int n;
int size;
while(scanf("%d",&n)!=EOF)
{
size=0;
while(n--)
{
scanf("%s",s);
if(s[0]=='P')
{
if(size==0)
printf("empty\n");
else{
sort(num,num+size);
printf("%d+i%d\n",num[0].a,num[0].b );
size--;
for(int i=0;i<size;++i)
num[i]=num[i+1];
printf("SIZE = %d\n",size );
}
}
else if(s[0]=='I'){
scanf("%d+i%d",&num[size].a,&num[size].b);

num[size].m=num[size].a*num[size].a+num[size].b*num[size].b;
++size;
printf("SIZE = %d\n", size);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: