九度OJ题目1178:复数集合

题目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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值