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


#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;

#28

Мой код

Summary

var qualificationDistance = 200;
var attempts = [120, 150, 160, 201, 203, 180, 202];
var qualified = false;
var averageBest = 0;
var nach = 0;
for(var i = 0;i < attempts.length - 1;i++){
var minValue = attempts[i]
for(var j = i + 1;j < attempts.length;j++){

if(attempts[j] > minValue){
  minValue = attempts[j]
  var swap = attempts[i]
  attempts[i] = minValue
  attempts[j] = swap
  }
}
averageBest = (attempts[0] + attempts[1] + attempts[2]) / 3

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


#29

Решил отсортировать не весь массив, а лишь наибольшие 3 элемента.

Мой код
var attemptsBest = [];
var n = 3;

//запускаем цикл, который отсортирует 3 наибольших значения
for (var i = 0; i <= n-1 ; i++) {
  attemptsBest[i] = attempts[i]; 
  for (var j = i; j <= attempts.length -1 ; j++) {
    if (attemptsBest[i] < attempts[j]) {
        var swap = attempts[j];
        attempts[j] = attemptsBest[i];
        attemptsBest[i] = swap; 
    }
  }
}

//находим среднее значение
for (var o = 0; o <= attemptsBest.length -1 ; o++) {
  averageBest += attemptsBest[o]; 
}
averageBest /= n; 

//делаем проверку
if (averageBest >= qualificationDistance) {
  qualified = true; 
}

#30

Мой вариант :lion:

Рекорды по прыжкам в длину
console.log('Программа "Рекорды по прыжкам в длину" by Nerealist');

//Входные данные
var qualificationDistance = 200;
var attempts = [120, 150, 160, 201, 203, 180, 202];
var qualified = false;
var averageBest = 0;
console.log('Квалификационное значение прыжка: ' + qualificationDistance);
console.log('Ваши прыжки за тренировку : ' + attempts);

// Сортируем массив по возрастанию
for (var i = 0; i < attempts.length - 1; i++) {
  var minValue = attempts[i];
  
  for (var j = i + 1; j < attempts.length; j++) {
    if (attempts[j] < minValue) {
      minValue = attempts[j];
      var swap = attempts[i];
      attempts[i] = minValue;
      attempts[j] = swap;
    }
  }
}

// Находим среднее значение трёх лучших прыжков
averageBest = ((attempts[attempts.length - 1]) + (attempts[attempts.length - 2]) + (attempts[attempts.length - 3])) / 3;

//Сравниваем среднее значение с квалификационным
if (averageBest > qualificationDistance) {
  qualified = true;
  console.log('С такими прыжками вы в лёгкую пройдете квалификацию, Сэр');
}else {
  qualified = false;
  console.log('К сожалению Вам нужно больше тренироваться, вы не проходите, Сэр');
}