题目规则:
小明升学到了小学1年级来到新班级后,发现其他小朋友身高参差不齐,然后就基于各小朋友和自己的身高差,对他们进行排序。输出排序结果,各正整数以空格分割和小明身高差绝对值最小的小朋友排在前面和小明身高差绝对值最大的小朋友排在后面如果两个小朋友和小明身高差一样,则个子较小的小朋友排在前面。
//readline是Node.js里实现标准输入输出的封装好的模块,通过这个模块我们可以以逐行的方式读取数据流。使用require("readline")可以引用模块。
const readline=require("readline");
// 创建readline接口实例
const rl=readline.createInterface({
input:process.stdin,
output:process.stdout,
})
// 定义一个空数组,监听文档流读取并通过箭头函数push到数组中。
const lines=[];
rl.on('line',(line)=>{
lines.push(line);
// 为什么这里数组长度是2
if(lines.length===2){
// lines.length===2表示读取了两次,分两次输入规则,第一次输入了小明的身高和班级其他人数
// 第二次输入其他人的身高
// 解构赋值的方式找到小明的身高h,和班级人数n(不包含小明)。..map会返回一个新新数组,处理方式是更具map内部的逻辑做相应的处理。
// 解构赋值h和n以及其他人的身高数组对象。
const [h,n]=lines[0].split(" ").map(Number);
const heights=lines[1].split(" ").map(Number);
console.log(getResult(h,heights));
// 将lines数组清空
lines.length=0;
}
})
function getResult(h,heights){
heights.sort((a,b)=>{
// 定义两个变量接收元素中数组和小明身高h的绝对值
const absA=Math.abs(a-h);
const absB=Math.abs(b-h);
// 条件判断,差的绝对值不相等,则按照差值从小到大的顺序排列,如果差的绝对值相等,则按照身高从小到大排列
if(absA!=absB) return absA-absB;
else return a-b
})
return heights.join(" ");
}