题目描述:
为了解决新学期学生暴涨的问题,小乐村要建所新学校。考虑到学生上学安全问题,需要所有学生家到学校距离最短。 假设学校和所有的学生家,走在一条直线上。 请问,学校要建在什么位置,能使得学校到各个学生家的距离之和最短?
输入描述:
输入的第一行是一个整数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),三行代码就够了
#华为机试,emo了#
n=int(input())
homes=sorted(list(map(int,input().split())))
print(homes[n//2] if n%2!=0 else homes[n//2-1])