llllmz

导航

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

调试了好几次,模块化的思想还是很重要的,要不然查错起来太困难了。代码页很乱,以后注意这点。

结果:

posted on 2024-01-25 17:25  神奇的萝卜丝  阅读(33)  评论(0)    收藏  举报