HDUOJ 水果

来源:互联网 发布:淘宝放单主持好做吗 编辑:程序博客网 时间:2024/04/28 01:03


/*水果
夏天来了~~好开心啊,呵呵,好多好多水果~~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.
现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
Input
第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.
其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),
水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.
这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;
同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
Sample Input
1
5
apple shandong 3
pineapple guangdong 1
sugarcane guangdong 1
pineapple guangdong 3
pineapple guangdong 1
Sample Output
guangdong
   |----pineapple(5)
   |----sugarcane(1)
shandong
   |----apple(3)*/

字符串处理

#include<stdio.h>
 #include<string.h>
 #include<stdlib.h>
 #include<algorithm>
 using namespace std;
 struct app{
     char name[81];//名称
    char add[81];//地址
    int num;//数量
}guo[100];

int cmp(const void *a,const void *b){//按照要求结构体排序
    struct app *c= (app *)a; 
     struct app *d= (app *)b; 
     if(strcmp(c->add,d->add)!=0) 
     return strcmp(c->add,d->add); 
     else  
     return strcmp(c->name,d->name); 
 }
 int main(){
     int n,m;
     scanf("%d",&n);
     while(n--){
      int j=0;
         scanf("%d\n",&m);
         for(int i=0;i<m;i++)
             scanf("%s %s %d",guo[i].name,guo[i].add,&guo[i].num);
         qsort(guo,m,sizeof(guo[0]),cmp);
         //sort(guo,guo+m,cmp);
         for(int i=1;i<m;i++)
         {
          if(strcmp(guo[i].add,guo[i-1].add)==0&&strcmp(guo[i].name,guo[i-1].name)==0)//add,name都相等相加  前边的变为0
    {guo[i].num+=guo[i-1].num;
     guo[i-1].num=0;
       }
         }
         printf("%s\n",guo[j].add);
         for(j=0;j<m;j++)
         {
          if(j!=0&&strcmp(guo[j].add,guo[j-1].add)!=0) printf("%s\n",guo[j].add);//只要地址和前边的不同就是新地址  输出
         if(guo[j].num!=0) printf("   |----%s(%d)\n",guo[j].name,guo[j].num);//输出数量不为0的水果的名字
        }
         if(n) printf("\n"); //if(n!=0)竟然也会错
    }
     return 0;
 }

0 0
原创粉丝点击