hdu_1263_水果

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
typedef struct info{
    char pro[90],name[90];
    int num;
}info;
int cmp(const void* a, const void* b){
    info arg1 = *(const info*)a;
    info arg2 = *(const info*)b;
    if(strcmp(arg1.pro, arg2.pro)>0){
        return 1;
    }
    else if(strcmp(arg1.pro, arg2.pro)<0){
        return -1;
    }
    else{
        if(strcmp(arg1.name, arg2.name)>0){
            return 1;
        }
        else if(strcmp(arg1.name, arg2.name)<0){
            return -1;
        }
        else{
            return 0;
        }
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        info in[120],pros[100][100];
        int n,i,j,indexpro=0,indexfruit=0,rec[100]={0};
        memset(in, 0, sizeof(in));
        memset(pros, 0, sizeof(pros));
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%s %s %d",in[i].name,in[i].pro,&in[i].num);
        }
        qsort(in, n, sizeof(info), cmp);
        pros[0][0]=in[0];
        for(i=1;i<n;i++){
            if(strcmp(in[i].pro, in[i-1].pro)==0){
                if(strcmp(in[i].name, in[i-1].name)==0){
                    strcpy(pros[indexpro][indexfruit].name, in[i].name);
                    strcpy(pros[indexpro][indexfruit].pro, in[i].pro);
                    pros[indexpro][indexfruit].num+=in[i].num;
                }
                else{
                    indexfruit++;
                    rec[indexpro]++;
                    strcpy(pros[indexpro][indexfruit].name, in[i].name);
                    strcpy(pros[indexpro][indexfruit].pro, in[i].pro);
                    pros[indexpro][indexfruit].num+=in[i].num;
                }
            }
            else{
                indexpro++;
                indexfruit=0;
                strcpy(pros[indexpro][indexfruit].name, in[i].name);
                strcpy(pros[indexpro][indexfruit].pro, in[i].pro);
                pros[indexpro][indexfruit].num+=in[i].num;
            }
        }
        for(i=0;i<=indexpro;i++){
            printf("%sn",pros[i][0].pro);
            for(j=0;j<=rec[i];j++){
                printf("   |----%s(%d)n",pros[i][j].name,pros[i][j].num);
            }
        }
        if(t!=0){
            printf("n");
        }
    }
    return 0;
}

这道题利用了快排函数的灵活性,我看网上有人用map做,没大有思路,就用了结构体做,利用我做PAT的经验,还是不难的.