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\n"); 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\n",a[i],b[i]); number--; printf("SIZE = %d\n",number); } } void insert(int x,int y){ a[number]=x; b[number]=y; c[number]=x*x+y*y; number++; printf("SIZE = %d\n",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; }