@Sonya__a

Почему неправильно считает счётчик?

Счётчик count правильно считает, если ввожу чётное число. Если число нечётное, то счётчик считает (0, 2, 4, 6...) и цикл становится бесконечным. Как исправить или куда перенести счётчик?
let n = +prompt('');
let count = 0;
for (let k = 1;   ; k++) {
       for (let i = 1; i<k ; i++) {
        for ( let j = 1; j<k ; j++) {
            if (i**2 + j**2 === k**2) {
                console.log(i,j,k,count);
                count += 1;
                } 
        }
    }  console.log (count);
    if (count === n) {
        break
    }   
}

Задача: найти первые n пифагоровых троек.
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Пифагорова тройка должна быть упорядочена, то есть x < y < z.
Из-за того, что это не учтено в программе, вы всегда находите чётное количество троек, для каждой (x, y, z) вы находите ещё и (y, x, z). Поэтому count между проверками всегда увеличивается на чётное число. Соответственно, значение count всегда чётно и, если вы задаёте нечётное n, то сравнение никогда не сработает. Для некоторых чётных n сравнение тоже никогда не выполнится, поскольку для одного z может быть несколько троек и count увеличится не на 2, а на 4, 6, 8...
let count = 0;
for (let z = 3; count < n; z += 1) {
  for (let x = 1; x < z - 1; x += 1) {
    for (let y = x + 1; y < z; y += 1) {
      if (x * x + y * y === z * z) {
        count += 1;
        console.log(`${count}: ${x}² + ${y}² = ${z}²`);
      }
    }
  }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы