KY196 复数集合C

C的思路就是,先把用数据录入,然后按要求选出最大(用选择排序是最简单的),最后输出。
#include<stdio.h>
#include<math.h>
struct node{
int a;
int b;
long sum;
};
typedef struct node num;
int change(char* s,int* i){
int j=0;
char t[100]={'\0'};
for(;s[*i]!='\0';(*i)++){
if('0'<=s[*i]&&s[*i]<='9'){
t[j++]=s[*i];
}else{
break;
}
}
int sum=0;
for(int x=0;t[x]!='\0';x++){
sum=sum*10+(t[x]-'0');
}
return sum;
}
int findmax(num* A,int size){
int max=1;
for(int i=2;i<=size;i++ ){
if(A[i].sum>A[max].sum) max=i;
}
return max;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
char c;
c=getchar();//接受换行
int top=0;
int size=0;
num A[2000];
for(int y=0;y<2000;y++){
A[y].a=-1;
A[y].b=-1;
A[y].sum=-1;
}
while(n!=0){
char s[100];
gets(s);
if(s[0]=='P'){
if(top==0){
printf("empty\n");
}else{//弹出最大
int max=findmax(&A,2000);
printf("%d+i%d\n",A[max].a,A[max].b);
A[max].sum=-1;
top--;
printf("SIZE = %d\n",top);
}
}else{//输出并插入
top++;
size++;
printf("SIZE = %d\n",top);
int i=0;
for(;s[i]!='\0';i++){
if('0'<=s[i]&&s[i]<='9') break;
}
A[size].a=change(s,&i);
i++;
for(;s[i]!='\0';i++){
if('0'<=s[i]&&s[i]<='9') break;
}
A[size].b=change(s,&i);
A[size].sum=pow(A[size].a,2)+pow(A[size].b,2);
}
n--;
}
}
return 0;
}
调试了好几次,模块化的思想还是很重要的,要不然查错起来太困难了。代码页很乱,以后注意这点。
结果:

浙公网安备 33010602011771号