给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
#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;
}