介绍一个二次排序的小技巧(best coder27期1001jump jump jump)
先来描述一下问题:
有n小孩在比赛跳远,看谁跳的最远。每个小孩可以跳3次,这个小孩的成绩就是三次距离里面的最大值。例如,一个小孩跳3次的距离分别时10, 30和20,那么这个小孩的成绩就是30。给出每个孩子三次跳的距离,问最终每个孩子的排名是多少。 问题分析:
方法1:
由于原问题规模较少,只有两个或三个孩子,可以采用暴力的方法解决,也可满足时间在1s之内(除java代码)。 方法2:
由于该问题按孩子跳远距离的最大值进行排序的话,再次按孩子照顺序输出的时候就会出现,由于原顺序未保存而导致不正确。 解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 10 typedef struct jump_kid
{
int num;
int value;
int pri; }jump_kid; int max_of_three(int a,int b,int c)
{/*前提a!=b!=c*/
int max3;
if(a > b && a > c)
max3 = a;
else if(b > a && b > c)
max3 = b;
else
max3 = c;
return max3;
} int comp_kids_value(const void *a, const void *b)
{//value降序排序
return ( ((jump_kid *)b)->value - ((jump_kid *)a)->value );
} int comp_kids_num(const void *a, const void *b)
{
return ( ((jump_kid *)a)->num - ((jump_kid *)b)->num );
}
int main()
{
int i,j,num_case,num_kid,jump1,jump2,jump3;
jump_kid kids[MAX_NUM];
scanf("%d",&num_case); for(i = ; i <= num_case; i++)
{
memset(kids,,sizeof(kids));
scanf("%d",&num_kid);
for(j = ; j < num_kid; j++)
{
scanf("%d%d%d",&jump1,&jump2,&jump3);
kids[j].num = j + ;
kids[j].pri = ;
kids[j].value = max_of_three(jump1,jump2,jump3);
} qsort(kids,num_kid,sizeof(jump_kid),comp_kids_value); //第一遍按照value值排序 for( j = ; j < num_kid; j++)
{
kids[j].pri = j + ; //排序后更新优先级
} qsort(kids,num_kid,sizeof(jump_kid),comp_kids_num); for( j = ; j < num_kid; j++)
printf("%d ",kids[j].pri); printf("\n");
} }
介绍一个二次排序的小技巧(best coder27期1001jump jump jump)的更多相关文章
- linux 一个跟踪文件删除的小技巧
最近有同事问我说他有个现场环境,经常会丢失业务文件,每天都出现,几百个里面丢失1到两个. 为了解决这个问题,我让他布置audit,具体可以man一下auditctl. 过了一天,他说audit.log ...
- KVO的使用二:常用方法及小技巧
(文章及代码接上一篇) options详解: KVO的注册方法中有一个options枚举,用来确定观察者的接收消息方法接收的信息,那么具体有什么关联呢?下面通过一段代码来验证是如何关联的.依次选择op ...
- ORACLE EBS FORM 二次开发常用小技巧
1.锁住当前行 Set_Item_Instance_Property('main.import_flag', CURRENT_RECORD, UPDATE_ALLOWED, PROPERTY_OFF) ...
- 【JS简洁之道小技巧】第一期 扁平化数组
介绍两种方法,一是ES6的flat,简单粗暴.二是递归,也不麻烦. flat ES6自带了flat方法,用于使一个嵌套的数组扁平化,默认展开一个嵌套层.flat方法接收一个数字类型参数,参数值即嵌套层 ...
- MapReduce二次排序
默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理 ...
- Python入门:数据结构的3个小技巧
这是关于Python的第11篇文章,主要介绍下数据结构的3个小技巧. 排序: 使用sorted函数实现排序. sorted函数按照长短.大小.英文字母的顺序给每个列表的元素进行排序.这个函数经常在数据 ...
- MathType使用中的四个小技巧
MathType是一种比较常见的数学公式编辑器,常常与office搭配着使用,我们在使用的时候有一些要注意的小技巧,下面我们就来给大家介绍介绍MathType使用中的四个小技巧? 技巧一:调整工具栏显 ...
- MapReduce 二次排序
默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理 ...
- php composer 相关及版本约束等小技巧
对于现代语言而言,包管理器基本上是标配.Java有Maven,Python有pip,Ruby有gem,Nodejs有npm.PHP的则是PEAR,不过PEAR坑不少: 依赖处理容易出问题 配置非常复杂 ...
随机推荐
- MongoDB的局域网连接问题
问题前两天在本机连接虚拟机的MongoDB,总是连接拒绝 上网百度了一堆,找到一些看似解释,实则不一定管用的玩意. 自己找到一个解法是改etc/mongodb.conf文件,把bindIp的127.0 ...
- MySQL之表关系
MySQL表关系 一对多关系 一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系. 举例,学校中一个学.院可以有很多的学生,而一个学生只属于某一个学院(通常情况下), ...
- Graphviz(02) 汉字subgraph不显示汉字的处理
1.按照官方教程设置 2.如果还不显示,在不显示的汉字前面加上一个“空格”,汉字就会正常显示. digraph idp_modules{ rankdir = TB; fontname = " ...
- Windows中使用 Python 调用 Matlab 程序
https://ww2.mathworks.cn/help/matlab/matlab_external/system-and-configuration-requirements.html http ...
- JVM之java并发 ——线程安全与锁优化
概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实 ...
- hive学习(1)
什么是Hive Hive是基于Hadoop的一个数据仓库工具(E抽取T转换L加载),可以将结构化的数据文件映射为一张表,并提供类SQL查询功能. 本质是:将HQL转化成MapReduce程序 Hive ...
- Testbench编写技巧
一.基本架构(常用模板) `timescale 1ns/1ps //时间精度 `define Clock //时钟周期 module my_design_tb; //================= ...
- Abp session和Cookie
问道 面向Abp 在面向服务的时候,Session 干嘛用? 先把Session 的作用说了,但是在微服务环境下给忽略了,相当于忽略了核心. Session 只是个功能.就是根据Cookie 的Ses ...
- 1-redis使用笔记
1.清空当前redis数据库缓存FLUSHDB flushdb 2.清空整个redis缓存FLUSHALL flushall 3.设置 SET w3ckey redis 4.获取 GET w3ckey ...
- 【JAVA】JSP+layui框架 静态表格转化成数据表格
<table lay-filter="demo" class="layui-table" id="excTable"> < ...