这个题烦了很久,终于在一个九度论坛的帖子里找到了一组测试用例,全部通过了之后,再提交,就AC了。哈哈。。。
题目1178:复数集合先贴上C++版的代码
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct Complex Complex;
struct Complex
{
int a;
int b;
int mo;//模值还是定义为一个字段比较好
};
bool cmp(Complex x,Complex y){
if(x.mo!=y.mo) return x.mo<y.mo;//升序,如果x.mo<y.mo为true,x排在y前面,所以要删除的数是mo大的
else return x.b>y.b;//升序,如果x.b>y.b为True,x排在y前面,所以要删除的是b小的
}
int main()
{
int n=0;
vector<Complex> v;
int a=0,b=0;
while (~scanf("%d",&n)){
Complex plex={0,0};
v.clear();
for(int i=0;i<n;i++){
char cmd[101]={0};
scanf("%s",cmd);
if(cmd[0]=='P'){
if(v.empty()){
printf("empty\n");
continue;
}else{
sort(v.begin(),v.end(),cmp);
plex=*(v.end()-1);//最后一个元素是*(v.end()-1),谨记!!!!顺便想想遍历vector的循环怎么写
v.pop_back();
printf("%d+i%d\n",plex.a,plex.b);
printf("SIZE = %d\n",v.size());
}
}else if(cmd[0]=='I'){
scanf("%d+i%d",&a,&b);
plex.a=a;
plex.b=b;
plex.mo=a*a+b*b;
v.push_back(plex);
printf("SIZE = %d\n",v.size());
}
}
}
return 0;
}
/**************************************************************
Problem: 1178
User: 爱理momoko
Language: C++
Result: Accepted
Time:10 ms
Memory:1524 kb
****************************************************************/
再贴上C语言版的代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Complex Complex;
struct Complex
{
int a;
int b;
int mo;
}complex[1001];
int cmp(const void *x,const void *y){
if(((Complex *)x)->mo!=((Complex *)y)->mo) return ((Complex *)x)->mo-((Complex *)y)->mo;
else return ((Complex *)x)->b<((Complex *)y)->b;
}
int main()
{
int n=0,a=0,b=0;;
char cmd[101]={0};
while (~scanf("%d",&n)){
Complex plex={0,0};
int size=0;
memset(complex,0,sizeof(complex));
for(int i=0;i<n;i++){
scanf("%s",cmd);
if(cmd[0]=='P'){
if(size==0){
printf("empty\n");
}else{
qsort(complex,size,sizeof(Complex),cmp);
printf("%d+i%d\n",complex[size-1].a,complex[size-1].b);
complex[size-1].a=0;
complex[size-1].b=0;
complex[size-1].mo=0;
size--;
printf("SIZE = %d\n",size);
}
}else if(cmd[0]=='I'){
scanf("%d+i%d",&a,&b);
plex.a=a;
plex.b=b;
plex.mo=a*a+b*b;
complex[size]=plex;
size++;
printf("SIZE = %d\n",size);
}
}
}
return 0;
}
/**************************************************************
Problem: 1178
User: 爱理momoko
Language: C
Result: Accepted
Time:10 ms
Memory:924 kb
****************************************************************/
测试用例:
结果应该是: