如何解决打印输入数据中最接近 0 的温度 - 编码游戏
我是编码新手,我不明白为什么我的代码在此编码游戏问题的最后一次测试中不起作用:https://www.codingame.com/ide/puzzle/temperatures
语言:Javascript
上次测试是:如果没有提供温度,则显示 0(零)
问题: 在本练习中,您必须分析温度记录以找到最接近零的记录。
规则: 编写一个程序,打印输入数据中最接近 0 的温度。如果两个数字同样接近零,则必须将正整数视为最接近零(例如,如果温度为 -5 和 5,则显示 5)。
游戏输入: 您的程序必须从标准输入读取数据并将结果写入标准输出。 输入 第 1 行:N,要分析的温度数 第 2 行:一个字符串,其中 N 个温度表示为从 -273 到 5526 的整数
输出: 如果未提供温度,则显示 0(零)。否则,显示最接近 0 的温度。 约束 0 ≤ N
这是我的代码:
`/**
- 下面自动生成的代码旨在帮助您解析
- 根据问题陈述的标准输入。 **/
`
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) => {
...
});
}
,
不知道您是否已经找到了解决方案。本周我发现了 codeame 并且我正在做同样的练习,我找到了一个解决方案。我会和你分享。
function closestToZero(numbers) {
if(!numbers.length){
return 0;
}
let closest = 0;
for (let i = 0; i < numbers.length ; i++) {
if (closest === 0) {
closest = numbers[i];
} else if (numbers[i] > 0 && numbers[i] <= Math.abs(closest)) {
closest = numbers[i];
} else if (numbers[i] < 0 && - numbers[i] < Math.abs(closest)) {
closest = numbers[i];
}
}
return closest;
}
let result = closestToZero(inputs);
console.log(result || 0);
我不知道是否有更准确的方法来做这件事,但经过一段时间的思考,我发现这是通过 6 个测试的方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。