Задача HackerRank PlusMinus с использованием цикла for - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужен очень конкретный ответ на эту конкретную проблему HackerRank: https://www.hackerrank.com/challenges/plus-minus/problem.

Почему этот код проходит все контрольные тесты?

function plusMinus(arr) {
let positives = 0
    let negatives = 0
    let zeros = 0
    const length=arr.length

    for (var i = 0; i < arr.length;i++){
        if (arr[i] > 0) {
            positives++
        } else if (arr[i] < 0) {
            negatives++
        } else {
            zeros ++
        }
    }

    const positiveRatio = Number(positives / length).toFixed(6)
    const negativeRatio = Number(negatives / length).toFixed(6)
    const zeroRatio = Number(zeros / length).toFixed(6)

    console.log(positiveRatio)
    console.log(negativeRatio)
    console.log(zeroRatio)
}

А почему этот код не проходит ни одного теста? (Я отредактировал свой код: извините за ранее неправильный код) Этот код также не работает.

function plusMinus(arr) {
var l = arr.length;
var positiveCounter = 0;
var negativeCounter = 0; 
var zeroCounter = 0;

for(var i=0; i<=l; i++) {
    if (arr[i]>0) { 
        positiveCounter+=1;
    } else if (arr[i]<0) { 
        negativeCounter+=1; 
    } else { 
        zeroCounter+=1; 
    }
}

console.log (
(positiveCounter/l).toFixed(6)+ '\n' +(negativeCounter/l).toFixed(6)+ '\n' +(zeroCounter/l).toFixed(6) );
 }

Я не хочу альтернативных способов решить эту проблему. Я просто хочу знать, почему первый код работает, а второй код нет ???

1 Ответ

2 голосов
/ 30 сентября 2019

Эти 2 кода разные, вы делите числа на длину в два раза

  • Сначала в присваивании переменной (var p= ...)
  • Второй при выполнении консоли.log ((p/l).toFixed(6))

Кроме того, как упомянуто @DhananjaiPai, у них есть несколько console.log, и у вас есть только один с символами разрыва, которые могут по-разному интерпретироваться ОС (\r\n или\n)

У вас также есть что-то не так в вашем цикле, я позволю вам найти его, но помните, что массив начинается с индекса 0, если массив имеет 3 элемента, это будет [0, 1, 2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...