1178.复数集合

题目描述:

    一个复数(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都是非负数。

#include<stdio.h>
#include<cstring>
#include<cmath>
using namespace std;

int a[1000],b[1000],c[1000];
int number=0;

void pop(){
    int i,max=c[0],maxi=0,maxb=b[0];
    if(number==0) printf("empty
");
    else {
    for(i=0;i<number;i++){
        if(max<c[i]) {
            max=c[i];
            maxi=i;
        }
        else if(max=c[i]){
            if(maxb>b[i]){
                maxb=b[i];
                maxi=i;
            }
        }
    }
    i--;
    printf("%d+i%d
",a[i],b[i]);
    number--;
    printf("SIZE = %d
",number);
}
}

void insert(int x,int y){
    a[number]=x;
    b[number]=y;
    c[number]=x*x+y*y;
    number++;
    printf("SIZE = %d
",number);
}

int main(){
    int n,i;
    char m[10],p[10];
    while(scanf("%d",&n)!=EOF){
        for(i=0;i<n;i++){
            scanf("%s",m);
            if(m[0]=='P'){
                pop();
            }
            else if(m[0]=='I'){
                scanf("%s",p);
                int x=p[0]-'0';
                int y=p[3]-'0';
                insert(x,y);
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/bernieloveslife/p/9735139.html