题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263

Problem Description
夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样Joe就可以很容易掌握所有水果的销售情况了.
Input
第一行正整数N(0<N<=10)表示有N组测试数据. 每组测试数据的第一行是一个整数M(0<M<=100),表示工有M次成功的交易.其后有M行数据,每行表示一次交易,由水果名称(小写字母组成,长度不超过80),水果产地(小写字母组成,长度不超过80)和交易的水果数目(正整数,不超过100)组成.
Output
对于每一组测试数据,请你输出一份排版格式正确(请分析样本输出)的水果销售情况明细表.这份明细表包括所有水果的产地,名称和销售数目的信息.水果先按产地分类,产地按字母顺序排列;同一产地的水果按照名称排序,名称按字母顺序排序. 两组测试数据之间有一个空行.最后一组测试数据之后没有空行.
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)
解题思路:这道题的要求就是相同产地归为一类,相同水果进行计数,且两者都是按字典序输出的,很基础的题目。怎么处理相同产地相同种类的水果数呢?我的做法就是如果当前的这条记录与下一条记录有相同的产地和相同的某种水果,就将这条记录的num计数存放到下一个记录中,同时将这条记录的num赋值为0,如果当前记录与下一个不相同的时候就先输出当前的产地,然后从前往当前遍历,如果产地相同,且num不为0,即可输出当前产地某种水果的总数量。(已经按字典排序了)
AC代码:
 #include<bits/stdc++.h>
using namespace std;
struct node
{
char fruit[];//水果名称
char area[];//产地名称
int num;//交易次数
}c[];
bool cmp(node x,node y)//排序规则
{
if(strcmp(x.area,y.area)<)return true;//产地先从小到大排序
if(strcmp(x.area,y.area)== && strcmp(x.fruit,y.fruit)<)return true;//如果产地相同,则按照字典将水果排序
return false;//否则返回假
}
int main()
{
int N,M;
cin>>N;
while(N--){ //测试数据组数
cin>>M;
getchar(); //吃掉回车符
for(int i=;i<M;i++)//M次交易
cin>>c[i].fruit>>c[i].area>>c[i].num;
sort(c,c+M,cmp);//按规则排序
for(int i=;i<M;i++){
if(strcmp(c[i].area,c[i+].area)==){//如果当前产地与下一个产地相同
if(strcmp(c[i].fruit,c[i+].fruit)==){//且水果名称相同
c[i+].num+=c[i].num;//则将水果数目进行相加
c[i].num=;//将原来的水果数目清空
}
}
else{//如果不同
cout<<c[i].area<<endl;//不同就先输出产地
for(int j=;j<M;j++){//依次再进行比较
if(strcmp(c[i].area,c[j].area)== && c[j].num)//找到一个num是不为0的,即该产地某种水果的总数
cout<<" |----"<<c[j].fruit<<'('<<c[j].num<<')'<<endl;//输出最后的水果数
}
}
}
if(N!=)cout<<endl;//案例之间输出空行
}
return ;
}

下面是string版本:

 #include<bits/stdc++.h>
using namespace std;
struct node
{
string fruit;//水果名称
string area;//产地名称
int num;//交易次数
}c[];
bool cmp(node x,node y)//排序规则
{
if(x.area!=y.area)return x.area<y.area;//产地先从小到大排序
return x.fruit<y.fruit;//如果产地相同,水果按字典排序
}
int main()
{
int N,M;
cin>>N;
while(N--){ //测试数据组数
cin>>M;
getchar(); //吃掉回车符
for(int i=;i<M;i++)//M次交易
cin>>c[i].fruit>>c[i].area>>c[i].num;
sort(c,c+M,cmp);//按规则排序
for(int i=;i<M;i++){
if(c[i].area==c[i+].area){//如果当前产地与下一个产地相同
if(c[i].fruit==c[i+].fruit){//且水果名称相同
c[i+].num+=c[i].num;//则将水果数目进行相加
c[i].num=;//将原来相同水果的数目清空
}
}
else{//如果不同
cout<<c[i].area<<endl;//不同就先输出产地
for(int j=;j<M;j++){//依次再进行比较
if((c[i].area==c[j].area) && c[j].num)//找到此时水果的最后一个计数num是不为0的,即为该产地某种水果的总数
cout<<" |----"<<c[j].fruit<<'('<<c[j].num<<')'<<endl;//输出最后的水果数
}
}
}
if(N!=)cout<<endl;//案例之间输出空行
}
return ;
}

题解报告:hdu 1263 水果的更多相关文章

  1. hdu 1263 水果 【二维map】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 题目大意: Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ ...

  2. HDU 1263 水果 结构体排序

    解题报告:一个结构体排序的题,用了一个运算符重载,要注意的是不同的地方可能会产相同的水果,一开始没注意. #include<cstdio> #include<cstring> ...

  3. hdu 1263 水果

    Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾客欢迎的水果.现在他想要一份水果销售情况的明细表,这样J ...

  4. HDU 1263(水果统计 **)

    题意是对水果的产地和种类进行统计再按格式输出. 代码如下: #include <bits/stdc++.h> using namespace std; struct node { ],pl ...

  5. hdu 1263 水果 结构的排序+sort自定义排序

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  6. hdu 1263 水果 (嵌套 map)

    水果Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...

  7. HDU 1263 水果 (STL map)

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...

  8. STL || HDU 1263 水果

    map可以映射map…… 然后在map里面会自己排序 惊了 注意输出格式 回车的输出 #include <iostream> #include <cstdio> #includ ...

  9. 题解报告:hdu 1398 Square Coins(母函数或dp)

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

随机推荐

  1. Find Minimum in Rotated Sorted Array 旋转数组中找最小值 @LeetCode

    O(n)的算法就不说了,这题主要考查的是 O(logn)的算法. 有序数组easy想到使用二分查找解决.这题就是在二分基础上做一些调整.数组仅仅有一次翻转,能够知道原有序递增数组被分成两部分,这俩部分 ...

  2. webservice0基础

    在学习webservice的时候,常常将ns和url花了好久时间才理解过来,这里备份下. 首先定义接口: @WebService public interface IService { @WebRes ...

  3. hdoj 2046 骨牌铺方格 【DP】+【斐波那契】

    dp果然不是好学的... 第n个,即2*n时,可由第n-1个的竖直排列再加一个,和第n-2个中横着排两个 所以f(n) = 1×f(n-1) + 1×f(n-2): 骨牌铺方格 Time Limit: ...

  4. SGU - 186 - The Chain (贪心)

    186. The Chain time limit per test: 0.25 sec. memory limit per test: 4096 KB input: standard input o ...

  5. sysinfo 系统调用

    在分析luci时,看到 usr/lib/luci/sys.lua 里调用 nixio.sysinfo().这是一个c调用lua的用例.在nixio的代码process.c里导出了给lua调用的接口.在 ...

  6. 原生js 平滑滚动到页面的某个位置

    window.scrollTo() 语法1:  window.scrollTo(x-coord,y-coord) x-coord 是文档中的横轴坐标. y-coord 是文档中的纵轴坐标. 例子: w ...

  7. react 中的 PureComponent

    React.PureComponent最重要的一个用处就是优化React应用,因为它减少了应用中的渲染次数,所以对性能的提升是非常可观的. 原理:在普通的 componnet 组件中,shouldCo ...

  8. JNI/NDK开发指南(2)

    1.生成动态库.so,存放于手机的system/lib/中(APP怎样将.so存入该文件夹,奇怪?????),Java层调用JNI的类会运行静态代码System.loadLibrary("* ...

  9. ABAP ALV F4帮助

    ALV F4帮助, 选值保存到ALV. TYPE-POOLS:slis. CLASS lcl_event_receiver DEFINITION DEFERRED. DATA: gt_fcat TYP ...

  10. C#6.0 新功能

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...