@lychee123
2017-03-18T19:52:58.000000Z
字数 2235
阅读 1359
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;///声明一个it
for(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;///如果产地一样就按名字从小到大排序
else
return 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;
}