Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
#include<iostream> #include<cstring> using namespace std; struct node { char name[100],addr[100]; int m; }; int main() { int t,n,i,j,d,flog[120]; struct node f[120],temp; cin>>t; while(t--) { cin>>n; memset(flog,1,sizeof(flog)); for(i=0;i<n;i++) { //getchar(); cin>>f[i].name>>f[i].addr>>f[i].m; } for(i=0;i<n;i++)//结构体排序 for(j=i+1;j<n;j++) if(strcmp(f[i].addr,f[j].addr)>0) { temp=f[i];f[i]=f[j];f[j]=temp; } else if(strcmp(f[i].addr,f[j].addr)==0) { if(strcmp(f[i].name,f[j].name)>0) { temp=f[i];f[i]=f[j];f[j]=temp; } } for(i=0;i<n;i++) if(flog[i]) { d=i; flog[i]=0; for(j=i+1;j<n;j++) if(strcmp(f[i].addr,f[j].addr)==0) if(strcmp(f[d].name,f[j].name)==0) { flog[j]=0;f[d].m+=f[j].m; } else { d=j;flog[d]=0; } } int e; for(i=0,d=i;i<n;i++) if(strcmp(f[i].addr,f[d].addr)!=0||i==0) { d=i; cout<<f[d].addr<<endl; for(j=i,e=j;j<n;j++) if(strcmp(f[j].addr,f[d].addr)==0) if(i==j||strcmp(f[e].name,f[j].name)!=0) { e=j; cout<<" |----"<<f[e].name <<"("<<f[e].m<<")"<<endl; } } if(t) cout<<endl; } }