当前位置: 首页 > 面试经验 >

【华为OD机试2023】学校的位置(Python)

优质
小牛编辑
102浏览
2023-03-28

【华为OD机试2023】学校的位置(Python)

题目描述:

为了解决新学期学生暴涨的问题,小乐村要建所新学校。考虑到学生上学安全问题,需要所有学生家到学校距离最短。 假设学校和所有的学生家,走在一条直线上。 请问,学校要建在什么位置,能使得学校到各个学生家的距离之和最短?

输入描述:

输入的第一行是一个整数N(1<=N<=1000),表示有N户家庭。

输入的第二行是一个属组 (0<= <=10000),表示每户家庭的位置,所有家庭的位置都不相同。

输出描述:

输出一行,一个整数,表示你确定的学校位置。如有多个位置相同,则输出值最小的位置。

示例1

输入:

5

0 20 40 10 30

输出:

20

说明:

20到各个家庭的距离分别为 20 0 20 10 10,总和为 60,最小。

示例2

输入:

1

20

输出:

20

说明:

只有一组数据,20 到 20 距离最小,为 0。

示例3

输入:

2

0 20

输出:

0

说明:

虽然,有多个地方可以选,但是 0 数值最小。

解题思路:

正常来说应该是遍历最远的两个家庭之间的所有点,取距离和最短的那一个。但实际上如果仅仅是要解决这个题目,运用逻辑思考更简单——由于学校和所有家都在一条直线上,所以新学校的最佳选址点,一定是所有家庭的‘中间家庭’

比如有五个家庭,那么学校和第三个家庭重合建,如果有101个家庭,学校和第51个家庭重合建,如果有200个家庭,学校和第100、101个家庭建均可(按照题意选100),三行代码就够了


n=int(input())
homes=sorted(list(map(int,input().split())))
print(homes[n//2] if n%2!=0 else homes[n//2-1])

#华为机试,emo了#
 类似资料: