题目链接: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代码:
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. char fruit[];//水果名称
  6. char area[];//产地名称
  7. int num;//交易次数
  8. }c[];
  9. bool cmp(node x,node y)//排序规则
  10. {
  11. if(strcmp(x.area,y.area)<)return true;//产地先从小到大排序
  12. if(strcmp(x.area,y.area)== && strcmp(x.fruit,y.fruit)<)return true;//如果产地相同,则按照字典将水果排序
  13. return false;//否则返回假
  14. }
  15. int main()
  16. {
  17. int N,M;
  18. cin>>N;
  19. while(N--){ //测试数据组数
  20. cin>>M;
  21. getchar(); //吃掉回车符
  22. for(int i=;i<M;i++)//M次交易
  23. cin>>c[i].fruit>>c[i].area>>c[i].num;
  24. sort(c,c+M,cmp);//按规则排序
  25. for(int i=;i<M;i++){
  26. if(strcmp(c[i].area,c[i+].area)==){//如果当前产地与下一个产地相同
  27. if(strcmp(c[i].fruit,c[i+].fruit)==){//且水果名称相同
  28. c[i+].num+=c[i].num;//则将水果数目进行相加
  29. c[i].num=;//将原来的水果数目清空
  30. }
  31. }
  32. else{//如果不同
  33. cout<<c[i].area<<endl;//不同就先输出产地
  34. for(int j=;j<M;j++){//依次再进行比较
  35. if(strcmp(c[i].area,c[j].area)== && c[j].num)//找到一个num是不为0的,即该产地某种水果的总数
  36. cout<<" |----"<<c[j].fruit<<'('<<c[j].num<<')'<<endl;//输出最后的水果数
  37. }
  38. }
  39. }
  40. if(N!=)cout<<endl;//案例之间输出空行
  41. }
  42. return ;
  43. }

下面是string版本:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. string fruit;//水果名称
  6. string area;//产地名称
  7. int num;//交易次数
  8. }c[];
  9. bool cmp(node x,node y)//排序规则
  10. {
  11. if(x.area!=y.area)return x.area<y.area;//产地先从小到大排序
  12. return x.fruit<y.fruit;//如果产地相同,水果按字典排序
  13. }
  14. int main()
  15. {
  16. int N,M;
  17. cin>>N;
  18. while(N--){ //测试数据组数
  19. cin>>M;
  20. getchar(); //吃掉回车符
  21. for(int i=;i<M;i++)//M次交易
  22. cin>>c[i].fruit>>c[i].area>>c[i].num;
  23. sort(c,c+M,cmp);//按规则排序
  24. for(int i=;i<M;i++){
  25. if(c[i].area==c[i+].area){//如果当前产地与下一个产地相同
  26. if(c[i].fruit==c[i+].fruit){//且水果名称相同
  27. c[i+].num+=c[i].num;//则将水果数目进行相加
  28. c[i].num=;//将原来相同水果的数目清空
  29. }
  30. }
  31. else{//如果不同
  32. cout<<c[i].area<<endl;//不同就先输出产地
  33. for(int j=;j<M;j++){//依次再进行比较
  34. if((c[i].area==c[j].area) && c[j].num)//找到此时水果的最后一个计数num是不为0的,即为该产地某种水果的总数
  35. cout<<" |----"<<c[j].fruit<<'('<<c[j].num<<')'<<endl;//输出最后的水果数
  36. }
  37. }
  38. }
  39. if(N!=)cout<<endl;//案例之间输出空行
  40. }
  41. return ;
  42. }

题解报告: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. HUNT:一款可提升漏洞扫描能力的BurpSuite漏洞扫描插件

    今天给大家介绍的是一款BurpSuite插件,这款插件名叫HUNT.它不仅可以识别指定漏洞类型的常见攻击参数,而且还可以在BurpSuite中组织测试方法. HUNT Scanner(hunt_sca ...

  2. [Javascript] Link to Other Objects through the JavaScript Prototype Chain

    Objects have the ability to use data and methods that other objects contain, as long as it lives on ...

  3. 九度OJ1004 Median

    题目描写叙述: Given an increasing sequence S of N integers, the median is the number at the middle positio ...

  4. vue - 官方 - 上手

    Vue和其它框架一样,有用CDN或本地JavaScript框架,国内我推荐 bootstrap cdn. 为什么很多人选择CDN呢? CDN:内容分发网络(不同区域不同服务器,更快),减少本地服务器压 ...

  5. Android反复闹钟(每天)的实现

    MainActivity例如以下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android. ...

  6. ASP.NET MVC中为DropDownListFor设置选中项的方法

    在MVC中,当涉及到强类型编辑页,如果有select元素,需要根据当前Model的某个属性值,让Select的某项选中.本篇只整理思路,不涉及完整代码. □ 思路 往前台视图传的类型是List< ...

  7. 总结文件操作函数(二)-C语言

    格式化读写: #include <stdio.h> int printf(const char *format, ...);                   //相当于fprintf( ...

  8. 20170111 ABAP技术小结(全半角转换)

    DATA: it_po LIKE it_alv OCCURS 0 WITH HEADER LINE.************************************************** ...

  9. CRM 插件奇怪的报错

    CRM插件,数据库方式注册.报错 找不到方法:“Void Microsoft.Xrm.Sdk.Entity..ctor(System.String, System.Guid)”. 这个错误让人摸不着头 ...

  10. Js_闭包详解

    http://blog.csdn.net/chenglc1612/article/details/53413318 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变 ...