最新华为OD机试真题-身高差值排序(100分)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员

✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解

👏 感谢大家的订阅➕ 和 喜欢💗

📎在线评测链接

身高差值排序(100分)

华为OD

🌍 评测功能需要 =>订阅专栏<= 后联系清隆解锁~

🍓OJ题目截图

alt

🪐 身高差值排序

问题描述

K小姐和她的同学们身高都不太一样。她想按照每个同学与自己的身高差值的绝对值进行从小到大排序。如果两个同学与 K小姐身高差值的绝对值相等,那么身高较矮的同学排在前面。现在请你帮助 K小姐实现这个身高差值排序。

输入格式

第一行包含两个正整数 ,其中 表示 K小姐的身高, 表示其他同学的人数。

第二行包含 个正整数 ~ ,表示其他每个同学的身高,满足 (),且所有的 互不相同。

输出格式

输出身高差值排序后的结果,每个数之间用一个空格隔开。

样例输入

100 10
95 96 97 98 99 101 102 103 104 105

样例输出

99 101 98 102 97 103 96 104 95 105

数据范围

  • ()

题解

本题主要考察了对结构体的使用以及自定义排序规则。我们可以将每个同学的身高 与 K小姐的身高差值的绝对值 作为第一关键字,身高 作为第二关键字,构建结构体并自定义排序规则,然后将所有同学按照这个规则进行排序即可。

对于 C++ 语言,我们可以使用 pair<int,int> 来存储 ,然后对 pair 进行排序; 对于 Java 语言,我们可以自定义一个类 Student,然后实现 Comparable 接口,重写 compareTo 方法来定义排序规则; 对于 Python 语言,我们可以使用 (|H-H_i|,H_i) 作为元组直接进行排序。

最后将排序后的结果依次输出即可。

参考代码

  • Python
h, n = map(int, input().split())
heights = list(map(int, input().split()))
diffs = [(abs(h - x), x) for x in heights]
diffs.sort()
print(' '.join(map(str, [x[1] for x in diffs])))
  • Java
import java.io.*;
import java.util.*;

class Student

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

最新华为OD机试-D卷 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD-C/D卷的题目汇总和(Java/Cpp/Python)三语言解析 + 提供OJ在线评测 订阅专栏后请私信留下你想要的 用户名,学长这边帮你开通对应的 OJ 账号和权限。

全部评论

相关推荐

06-15 11:12
门头沟学院 Java
烤点老白薯:笑死我了改成女的,浏览量提升了10倍!
点赞 评论 收藏
分享
2 2 评论
分享
牛客网
牛客企业服务