水果
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9537 Accepted Submission(s): 3830
题目链接:点击打开链接
Problem Description
夏天来了~~好开心啊,呵呵,好多好多水果~~
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
Input
第一行正整数N(0<N<=10)表示有N组测试数据.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
Sample Input
15apple shandong 3pineapple guangdong 1sugarcane guangdong 1pineapple guangdong 3pineapple guangdong 1
Sample Output
guangdong |----pineapple(5) |----sugarcane(1)shandong |----apple(3)
分析:
结构体加上 map 的总和应用,对于数据的存储,我们用结构体存,然后因为有时会输入会重复,所以统计起来需要用 map 统计比较方便,看代码吧!
#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<map>
using namespace std;
struct book{
int num;///该水果的数量
string name;///该水果的名字
string home;///该水果的生产地
}s[105],h[105];
bool cmp(struct book a,struct book b)///规定按照水果圣产地的字母顺序来排序
{
if(a.home==b.home)
return a.name<b.name;
else
return a.home<b.home;
}
int main()
{
map<string,int>p;///统计同一地区同一水果种类的个数
int t,m;
string a;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
scanf("%d",&m);
for(int i=0;i<m;i++)
{
cin>>s[i].name>>s[i].home>>s[i].num;
a=s[i].name+s[i].home;///合并水果的生产地和名字
p[a]+=s[i].num;///统计同一个地方同一种水果的总数量
}
///因为s数组里存的肯定是有重复的水果的,所以我们得去重,然后统计出最终的同样的水果的总数
int k=0;
for(int i=0;i<m;i++)
{
a=s[i].name+s[i].home;
if(p[a]!=0)///说明存在该种水果并且没有被通缉过
{
h[k].name=s[i].name;///记录水果的名字
h[k].home=s[i].home;///记录水果的生产地
h[k].num=p[a];///记录该种水果的总个数
p[a]=0;///然后将对应的数值变为0,意味着该种水果被统计过
k++;
}
}
sort(h,h+k,cmp);///对我们整理好的h数组进行符合题目要求的排序
for(int i=0;i<k;i++)///按要求输出正确的格式
{
if(i==0||h[i].home!=h[i-1].home)
{
cout<<h[i].home<<endl;
}
cout<<" |----"<<h[i].name<<"("<<h[i].num<<")"<<endl;
}
if(i!=t)
printf("\n");
}
return 0;
}