目录
题目描述
输入描述
输出描述
用例
题目解析
算法源码
题目描述
为了解新学期学生暴涨的问题,小乐村要建立所新学校,
 考虑到学生上学安全问题,需要所有学生家到学校的距离最短。
 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置,
 能使得到学校到各个学生家的距离和最短。
输入描述
第一行: 整数 n 取值范围 [1 ,1000 ],表示有 n户家庭。
 第二行: 一组整数 m 取值范围 [0, 10000 ] ,表示每户家庭的位置,所有家庭的位置都不相同。
输出描述
一个整数,确定的学校的位置。
 如果有多个位置,则输出最小的。
用例
| 输入 | 5 0 20 40 10 30  | 
| 输出 | 20 | 
| 说明 | 无 | 
题目解析

0 + 10 + 20 + 30 + 40 = 100

10 + 0 + 10 +20 + 30 = 70

20 + 10 +0 + 10 + 20 = 50
将学校建在30,40点上,其实和建在10,0点上相同,此处不再赘述。
因此,我们发现,将学校建在所有学生家位置的共同中心点位置的距离最短。
本题其实就是中位数定理。
算法源码
/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});
const lines = [];
rl.on("line", (line) => {
  lines.push(line);
  if (lines.length === 2) {
    const n = lines[0] - 0;
    const arr = lines[1].split(" ").map(Number);
    console.log(getResult(arr, n));
    lines.length = 0;
  }
});
function getResult(arr, n) {
  arr.sort((a, b) => a - b);
  const len = arr.length;
  if (len % 2 === 0) {
    const mid = len / 2;
    return (arr[mid] + arr[mid - 1]) / 2;
  } else {
    return arr[Math.floor(len / 2)];
  }
}
                


















