我是编码新手,我不明白为什么我的代码在这个编码游戏问题的最后一次测试中不起作用:https://www.codingame.com/ide/puzzle/temperatures
语言:Javascript
上次测试是:如果没有提供温度,则显示0(零(
问题:在这个练习中,你必须分析温度记录,以找到最接近零的温度。
规则:编写一个程序,打印输入数据中最接近0的温度。如果两个数字同样接近零,则必须将正整数视为最接近零(例如,如果温度为-5和5,则显示5(。
游戏输入:您的程序必须从标准输入读取数据,并将结果写入标准输出。输入第1:N行,要分析的温度数第2行:N个温度的字符串,表示为-273到5526 之间的整数
输出:如果未提供温度,则显示0(零(。否则,显示最接近0的温度。限制0≤N<10000
这是我的代码:
`/**
- 下面的自动生成代码旨在帮助您解析
- 根据问题陈述的标准输入。**/
`
const n = parseInt(readline()); // the number of temperatures to analyse
var inputs = readline().split(' '); // this is the array of split temperature
var t;
for (let i = 0; i < n; i++) {
t = parseInt(inputs[i]);// a temperature expressed as an integer ranging from -273 to 5526
}
var temperatureOfZero = 0;
function closest(array){
return array.reduce((a, b) => {
let aDiff = Math.abs(a - temperatureOfZero);
let bDiff = Math.abs(b - temperatureOfZero);
if (Array.isArray(array) && array[0] === "" ) {
return 0;
}
else if ( aDiff == bDiff){
if (a > b){
return a;
}else{
return b;
}
}//end of first else if (aDiff == bDiff)
else if (aDiff > bDiff){
return b;
}else{
return a;
}
}); }
let result = closest(inputs);
console.log(result);`
输入测试1:
5
1-2-8 4 5
输出测试1:
1
输入测试5(如果没有提供温度,则显示0(零(
0
输出测试5我应该得到
0
当我运行代码时得到的输出:
故障
发现:无
预期:0
提前谢谢你的解释
当数组为空时,我认为需要返回0。类似于:
function closest(array){
if(array.length === 0) return 0;
return array.reduce((a, b) => {
...
});
}
LauraS解决方案非常平滑,但没有考虑当数组中有0时会发生什么,CodinGame也没有考虑这种可能性,这就是为什么它通过了所有测试,但在我看来,如果添加ts[i]===0返回ts[i],则会更干净
不知道您是否已经找到了解决方案。本周我发现了与我合作的问题,我也在做同样的练习,我找到了解决方案。我会和你分享的。
function closestToZero(numbers) {
if(!numbers.length) return 0;
let closest = Math.max(...numbers);
for (let i = 0; i < numbers.length ; i++) {
if (Math.abs(numbers[i]) < Math.abs(closest)) {
closest = numbers[i];
} else if (Math.abs(numbers[i]) === Math.abs(closest)) {
if (numbers[i] > closest) closest = numbers[i];
}
}
return closest;
};
let inpArr = [0, -1, 1, 42];
console.log(`inpArr: ${inpArr.join(', ')} result: ${closestToZero(inpArr)}`);
inpArr = [];
console.log(`inpArr: ${inpArr.join(', ')} result: ${closestToZero(inpArr)}`);
inpArr = [30, -30, 43, 84, 102, -31];
console.log(`inpArr: ${inpArr.join(', ')} result: ${closestToZero(inpArr)}`);
inpArr = [93, -11, 22, -15, 43, 3, -2];
console.log(`inpArr: ${inpArr.join(', ')} result: ${closestToZero(inpArr)}`);
inpArr = [-30, -3, -6, -9, 44];
console.log(`inpArr: ${inpArr.join(', ')} result: ${closestToZero(inpArr)}`);
我不知道是否有更准确的方法可以做到这一点,但经过几分钟的思考,这就是我通过 6项测试的方法