夏天来了~~好开心啊,呵呵,好多好多水果~~ 
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) // 使用sort+bool进行多条件排序
 #include<stdio.h>
#include<string.h>
struct Fruit
{ char name[]; char ori[]; int num; };
int main()
{
int n, m, i,j,k, gap, flag;
struct Fruit f[], t;
char name[], ori[]; int sum;
scanf("%d", &n);
while(n--)
{
scanf("%d", &m);
for(i=;i<m;i++)
scanf("%s %s %d", &f[i].name, &f[i].ori, &f[i].num);
// 按产地分类,产地按字母顺序排列
for(gap=m/; gap>; gap/=)
for(i=gap; i<m; i++)
for(j=i;j-gap>=&&strcmp(f[j].ori,f[j-gap].ori)<;j-=gap)
{ t=f[j-gap]; f[j-gap]=f[j]; f[j]=t; }
// 同一产地的水果按照名称排序,名称按字母顺序排序
strcpy(ori,f[].ori); j=; int num[]={};
for(i=;i<m;i++)
{
if(strcmp(ori,f[i].ori)==) num[j]++;
else
{ strcpy(ori,f[i].ori); j++; }
} // j=产地数, num[j]=水果数
for(i=,k=;i<m;i+=num[k]+,k++)
for(gap=(num[k]+)/; gap>; gap/=)
for(i=gap; i<num[k]+; i++)
for(j=i;j-gap>=&&strcmp(f[j].name,f[j-gap].name)<;j-=gap)
{ t=f[j-gap]; f[j-gap]=f[j]; f[j]=t; }
strcpy(ori,f[].ori); strcpy(name,f[].name); sum=f[].num;
puts(ori);
for(i=;i<m;i++)
{
if(strcmp(ori,f[i].ori)==)
{
if(strcmp(name,f[i].name)==)
sum+=f[i].num;
else
{
printf(" |----%s(%d)\n", name, sum);
strcpy(name,f[i].name); sum=f[i].num;
}
}
else
{
printf(" |----%s(%d)\n", name, sum);
strcpy(ori,f[i].ori); strcpy(name,f[i].name); sum=f[i].num;
puts(ori);
}
}
printf(" |----%s(%d)\n", name, sum);
if(n) printf("\n");
}
return ;
}

WA

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std; struct Fruit
{ char name[]; char ori[]; int num; } f[];
bool cmp(Fruit a, Fruit b)
{
// 先按产地分类,产地按字母顺序排列
if(strcmp(a.ori,b.ori)!=)
return strcmp(a.ori,b.ori)<;
// 同一产地的水果按照名称排序,名称按字母顺序排序
else if(strcmp(a.name,b.name)!=)
return strcmp(a.name,b.name)<;
}
int main()
{
int n,m, i,sum;
char ori[], name[];
scanf("%d", &n);
while(n--)
{
scanf("%d", &m);
for(i=;i<m;i++)
scanf("%s %s %d", &f[i].name, &f[i].ori, &f[i].num);
sort(f,f+m,cmp);
strcpy(ori,f[].ori); strcpy(name,f[].name); sum=f[].num;
puts(ori);
for(i=;i<m;i++)
{
if(strcmp(ori,f[i].ori)==)
{
if(strcmp(name,f[i].name)==)
sum+=f[i].num;
else
{
printf(" |----%s(%d)\n", name, sum);
strcpy(name,f[i].name); sum=f[i].num;
}
}
else
{
printf(" |----%s(%d)\n", name, sum);
strcpy(ori,f[i].ori); strcpy(name,f[i].name); sum=f[i].num;
puts(ori);
}
}
printf(" |----%s(%d)\n", name, sum);
if(n) printf("\n");
}
return ;
}

AC

// WA原因待查

8N - 水果的更多相关文章

  1. codevs3304 水果姐逛水果街

    题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样. 学过oi的水果姐迅速发现了 ...

  2. 基于HTML5和JS实现的切水果游戏

    切水果游戏曾经是一款风靡手机的休闲游戏,今天要介绍的就是一款网页版的切水果游戏, 由JavaSript和HTML5实现,虽然功能和原版的相差太大,但是基本的功能还是具备了,还是模仿的挺逼真,有一定的J ...

  3. 水果姐逛水果街Ⅱ codevs 3305

    3305 水果姐逛水果街Ⅱ  时间限制: 2 s  空间限制: 256000 KB   题目描述 Description 水果姐第二天心情也很不错,又来逛水果街. 突然,cgh又出现了.cgh施展了魔 ...

  4. 最简单的可取消多选效果(以从水果篮中挑选水果为例)【jsDEMO】

    [功能说明] 最简单的可取消多选效果(以从水果篮中挑选水果为例) [html代码说明] <div class="box" id="box"> < ...

  5. 前端优秀作品展示,JavaScript 版水果忍者

    <水果忍者>是一款非常受喜欢的手机游戏,刚看到新闻说<水果忍者>四周年新版要上线了.网页版的切水果游戏由百度 JS 小组开发,采用 vml + svg 绘图,使用了 Rapha ...

  6. codevs3305 水果姐逛水果街Ⅱ

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  7. 【CodeVS】p1299 切水果

    题目描述 Description 简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果(可能有的水果被重复切),每切完一次输出剩下水果数量 数据已重新装配,不会出现OLE错误 时限和 ...

  8. Codevs 1299 切水果

    题目链接 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果 ...

  9. 水果项目第1集-想法>需求->功能->数据库设计->类设计

    懒,懒人,我是个懒人. 懒人想做点事,总是拖拖拉拉,迟迟没有开始. 很久很久以前,就想做属于自己的产品,但是至今还没有一个属于自己的产品. 两年前,终于想好,要做一个网上卖水果的系统,手机上点点,水果 ...

随机推荐

  1. SQL--结构化的查询语言

    SQL--结构化的查询语言T-SQL:Transact-SQL (SQL的增强版) 逻辑运算符 and && or || not ! 关系运算符 等于 = 不等于<>或!= ...

  2. windows和linux下如何远程获取操作系统版本和主机名

    远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12 ...

  3. js高级-原型链

    JavaScript是基于原型的面向对象的语言(相当于一个基类,父类),而不是像Java通过类模板构造实例,通过原型实现属性函数的复用 函数都有 prototype属性 指向函数的原型对象 只有函数根 ...

  4. 前端路由两种模式:hash、history

    随着 ajax 的使用越来越广泛,前端的页面逻辑开始变得越来越复杂,特别是spa的兴起,前端路由系统随之开始流行. 从用户的角度看,前端路由主要实现了两个功能(使用ajax更新页面状态的情况下): 记 ...

  5. quast-lg

    1.官网简介 http://cab.spbu.ru/software/quast-lg/ QUAST- lg是QUAST的一个扩展,用于评估大型基因组装配(直至哺乳动物大小).QUAST- lg从5. ...

  6. cacti有图无数据解决办法

    Cacti 安装不久,图像界面出来了,但是一直没有数据. Cacti 日志中的错误或警告也都一个个全部解决.有些需要访问文件的权限也都有了. 1.system utilities –>Rebui ...

  7. javascript学习笔记(五):异常捕获和事件处理

    异常捕获 Try{ 发生异常的代码块 }catch(err){ 异常信息处理 } <!DOCTYPE html> <html> <head lang="en&q ...

  8. pm2-zabbix 安装与配置

    官方GITHUB路径 https://github.com/greatcare/pm2-zabbix 环境要求,zabbix-agent zabbix-sender需要安装 npm安装要求 npm i ...

  9. linux下的ping工具--fping

    前言:       如果想ping 大量的不连续的地址,有想知道放回结果,在linux系统下有一个非常合适的工具--fping. Fping 官网:http://www.fping.org/ Fpin ...

  10. vim常用命令之多行注释和多行删除

    vim中多行注释和多行删除命令,这些命令也是经常用到的一些小技巧,可以大大提高工作效率.   1.多行注释:   1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;   ...