先来描述一下问题:

问题描述
有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)的更多相关文章

  1. linux 一个跟踪文件删除的小技巧

    最近有同事问我说他有个现场环境,经常会丢失业务文件,每天都出现,几百个里面丢失1到两个. 为了解决这个问题,我让他布置audit,具体可以man一下auditctl. 过了一天,他说audit.log ...

  2. KVO的使用二:常用方法及小技巧

    (文章及代码接上一篇) options详解: KVO的注册方法中有一个options枚举,用来确定观察者的接收消息方法接收的信息,那么具体有什么关联呢?下面通过一段代码来验证是如何关联的.依次选择op ...

  3. ORACLE EBS FORM 二次开发常用小技巧

    1.锁住当前行 Set_Item_Instance_Property('main.import_flag', CURRENT_RECORD, UPDATE_ALLOWED, PROPERTY_OFF) ...

  4. 【JS简洁之道小技巧】第一期 扁平化数组

    介绍两种方法,一是ES6的flat,简单粗暴.二是递归,也不麻烦. flat ES6自带了flat方法,用于使一个嵌套的数组扁平化,默认展开一个嵌套层.flat方法接收一个数字类型参数,参数值即嵌套层 ...

  5. MapReduce二次排序

    默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理 ...

  6. Python入门:数据结构的3个小技巧

    这是关于Python的第11篇文章,主要介绍下数据结构的3个小技巧. 排序: 使用sorted函数实现排序. sorted函数按照长短.大小.英文字母的顺序给每个列表的元素进行排序.这个函数经常在数据 ...

  7. MathType使用中的四个小技巧

    MathType是一种比较常见的数学公式编辑器,常常与office搭配着使用,我们在使用的时候有一些要注意的小技巧,下面我们就来给大家介绍介绍MathType使用中的四个小技巧? 技巧一:调整工具栏显 ...

  8. MapReduce 二次排序

    默认情况下,Map 输出的结果会对 Key 进行默认的排序,但是有时候需要对 Key 排序的同时再对 Value 进行排序,这时候就要用到二次排序了.下面让我们来介绍一下什么是二次排序. 二次排序原理 ...

  9. php composer 相关及版本约束等小技巧

    对于现代语言而言,包管理器基本上是标配.Java有Maven,Python有pip,Ruby有gem,Nodejs有npm.PHP的则是PEAR,不过PEAR坑不少: 依赖处理容易出问题 配置非常复杂 ...

随机推荐

  1. [LeetCode] 654. Maximum Binary Tree 最大二叉树

    Given an integer array with no duplicates. A maximum tree building on this array is defined as follo ...

  2. ObjectARX开发VC版本对照表R14~AutoCAD2020

  3. @Component和@Configuration作为配置类的差别

    https://blog.csdn.net/long476964/article/details/80626930 虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class ...

  4. 中国大学MOOC-翁恺-C语言程序设计习题集(二)

    04-0. 求符合给定条件的整数集(15)给定不超过6的正整数A,考虑从A开始的连续4个数字.请输出所有由它们组成的无重复数字的3位数. 输入格式: 输入在一行中给出A. 输出格式: 输出满足条件的的 ...

  5. golang ---获取IP Address

    package main import ( "fmt" "log" "os/exec" "regexp" ) func ...

  6. tomcat配置外部静态资源映射路径(windows和Linux部署)

    如果你不想用ngnix配置的话,只单独使用tomcat的话可以看看这篇文章,接下来开始 使用场景 1.单机开发有时侯如果放在war下每次clean都会清理当前项目下静态文件特别折腾. 2.只有启动to ...

  7. Spring Cloud Alibaba学习笔记(17) - Spring Cloud Gateway 自定义路由谓词工厂

    在前文中,我们介绍了Spring Cloud Gateway内置了一系列的路由谓词工厂,但是如果这些内置的路由谓词工厂不能满足业务需求的话,我们可以自定义路由谓词工厂来实现特定的需求. 例如有某个服务 ...

  8. C# vb .net实现发光效果

    在.net中,如何简单快捷地实现Photoshop滤镜组中的发光效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...

  9. Web Api 转

    GET:生到数据列表(默认),或者得到一条实体数据 POST:添加服务端添加一条记录,记录实体为Form对象 PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输 ...

  10. 网页包抓取工具Fiddler工具简单设置

    当下载好fiddler软件后首先通过以下简单设置,或者有时候fiddler抓取不了浏览器资源了.可以通过以下设置. 设置完成后重启软件.打开网络看看有没有抓取到包.