Испытание: Рекорды по прыжкам в длину


#21

Форматируйте код с помощью кнопки </> пожалуйста.


#22

хорошо, буду знать


#23

Добавил две переменные, чтобы программа стала более универсальна, переменная choose отвечает за количество проверяемых попыток из которых вычисляется среднее значение

Решение
var choose = 3;
var sum = 0;

for (var i = 0; i <= attempts.length - 2; i++) {
  var maxValue = attempts[i];
  for (var j = i + 1; j <= attempts.length - 1; j++) {
    if (attempts[j] > maxValue) {
      maxValue = attempts[j];
      var swap = attempts[i];
      attempts[i] = maxValue;
      attempts[j] = swap;
    }
  }
}
for (var n = choose - 1; n >=0; n--) {
  sum +=attempts[n];
  }
  
averageBest = sum/choose;
averageBest > qualificationDistance ? qualified = true : qualified = false;

#24

У меня проблема возникла при проверке кода ботом. Вот мой код:

Summary

var qualificationDistance = 200;
var attempts = [201,199,191,150];
var qualified = false;
var averageBest = 0;

for (var i = 0; i <= attempts.length - 2; i++) {
var maxValue = attempts[i];

for (var j = i + 1; j <= attempts.length - 1; j++) {
if (attempts[j] > maxValue) {
maxValue = attempts[j];
var swap = attempts[i];
attempts[i] = maxValue;
attempts[j] = swap;
}
}
}

for (var i = 0; i <= 2; i++) {
// averageBest += Math.round(attempts[i] / 3);
averageBest += attempts[i] / 3;
}
console.log(averageBest);

if (averageBest >= qualificationDistance) {
qualified = true;
} else {
qualified = false;
}
console.log(qualified);

И в одной из проверок вот такой результат выходит: 196.99999999999997
Я уже прочитала про эту “аномалию”, попробовала Math.ceil/round, но это не помогло. несостыковки тогда вылазят в других тестах. Как это решить?


#26

Вы фактически рассчитываете не среднее арифметическое трех элементов, а на каждой итерации цикла делите соответствующий элемент на 3, после чего суммируете их. В результате деления могут получаться бесконечные числа и происходит их округление по следующей причине:
https://learn.javascript.ru/
Чтобы этого избежать, необходимо в цикле найти сумму элементов, а деление на их количество выполнить отдельным действием вне цикла.


#27

выполнил по-возрастанию и по убыванию. Вариант с убыванием. Вопрос: Следовало ли здесь использовать оператор “?” при сравнении?

var qualificationDistance = 200;
var attempts = [120, 150, 160, 201, 203, 180, 202];
for (var i = attempts.length - 1; i >= 1; i--) {
  var minValue = attempts[i];
  for (var j = i - 1; j >= 0; j--) {
    if (attempts[j] < attempts[i]) {
      minValue = attempts[j];
      var samp = attempts[i];
      attempts[i] = minValue;
      attempts[j] = samp;
    }
  }
}
 var averageBest = (attempts[0] + attempts[1] + attempts[2]) / 3;
 var qualified = (averageBest > qualificationDistance)? true:false;