@lychee123
2017-03-18T11:52:58.000000Z
字数 2235
阅读 1658
STL 模板
题目描述
夏天来了~好开心啊,呵呵,好多好多水果~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
输入
第一行正整数N(0 每组测试数据的第一行是一个整数M(0
输出
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
样例
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)
代码1 (map排序)
#include<stdio.h>#include<map>///map是一个映射的关系map <A,B>mp A和B是一一对应的关系如果A有多个的话用pair<a1,a2>同理,pair里面还可以有pair#include<algorithm>#include<string.h>using namespace std;int main(){int n,m,i,j,k;char kind[111],from[111];int num;scanf("%d",&n);while(n--){scanf("%d",&m);map<pair<string,string>,int> mp;///每次循环重新声明就不需要清空了for(i=0;i<m;i++){scanf("%s%s%d",kind,from,&num);mp[make_pair(from,kind)]+=num;///map存数据可以去重和自动排序(从小到大)}int l=mp.size();string tmp="tmp";///用string字符串之间可以直接相等map<pair<string,string>,int>::iterator it;///声明一个itfor(it=mp.begin();it!=mp.end();it++){if(it->first.first==tmp)printf(" |----%s(%d)\n",it->first.second.c_str(),it->second);///加.c_str()就可以用printf输出否则要用cout输出else{tmp=it->first.first;printf("%s\n",it->first.first.c_str());printf(" |----%s(%d)\n",it->first.second.c_str(),it->second);}}if(n)printf("\n");}return 0;}
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;struct node{char name[111];char from[111];int num;}a[111];int cmp(node a,node b){if(strcmp(a.from,b.from)==0)///strcmp字符串大小比较return strcmp(a.name,b.name)<0;///如果产地一样就按名字从小到大排序elsereturn strcmp(a.from,b.from)<0;///产地不同按产地从小到大排序}int main(){int n,m,i,j;scanf("%d",&n);while(n--){scanf("%d",&m);for(i=0;i<m;i++)scanf("%s%s%d",a[i].name,a[i].from,&a[i].num);sort(a,a+m,cmp);for(i=m-1;i>0;i--){if((strcmp(a[i].from,a[i-1].from)==0)&&(strcmp(a[i].name,a[i-1].name)==0))a[i-1].num+=a[i].num;}for(i=0;i<m;i++){if(i==0){printf("%s\n",a[i].from);printf(" |----%s(%d)\n",a[i].name,a[i].num);continue;}if((strcmp(a[i].from,a[i-1].from)==0)&&(strcmp(a[i].name,a[i-1].name)!=0))printf(" |----%s(%d)\n",a[i].name,a[i].num);if(strcmp(a[i].from,a[i-1].from)!=0){printf("%s\n",a[i].from);printf(" |----%s(%d)\n",a[i].name,a[i].num);}}if(n)printf("\n");}return 0;}