Цитата:
Скорей всего вам такое решение нужно: function summa_6(n, arr) { if (arr.length <= 100) { let arr_6 = []; for (let i = 0; i < arr.length; i++) { if (!(arr[i] % 6) && arr[i] <= 300) { arr_6.push(arr[i]); } } //console.log(arr_6); let sum = 0; for (let i = 0; i < arr_6.length && i < n; i++) { sum += arr_6[i]; } //console.log(sum); return sum; } } // Пример вызова: summa_6(5, [1, 2, 3, 4, 5, 6, 7, 8, 12, 24, 300, 350, 450, 1250, 18, 36]); логи можете удалить или раскомментировать чтоб посмотреть массив кратный 6 и результат. |
Существует множество натуральных чисел N, из которых можно составить, например, такие последовательности
⟨0, 1, 2, 3, ...⟩ возрастающая последовательность элементов множества натуральных чисел. ⟨1, 10, 100, 1000, ...⟩ последовательность степеней десяти ⟨2, 3, 5, 7, ...⟩ последовательность простых чисел ⟨0, 1, 0, 1, ...⟩ чередующаяся последовательность 0 и 1 Все эти последовательности являются последовательностями натуральных чисел, поскольку элементы этих последовательностей принадлежат множеству натуральных чисел. Троеточие в записи последовательности указывает на бесконечность последовательности, т. е. вы можете всегда получить следующее число последовательности независимо от того, сколько чисел вы уже получили. Последовательность ⟨5, 4, 10, 8⟩ составлена из конечного числа элементов множества натуральных чисел. Количество чисел в этой последовательности – 4. Я могу попросить вас составить для меня последовательность, состоящую из i чисел. Вы составляете ⟨n₁, n₂, n₃, ..., nᵢ⟩, где n₁, n₂, n₃, ..., nᵢ принадлежат множеству натуральных чисел. Вы их выбираете в любом порядке. (вариантов – бесконечное число) И это тоже последовательность натуральных чисел. Цитата:
Код:
Алгоритм: суммирование чисел, кратных 6 function summation(seq) { return seq.reduce((sum, v) => v % 6 === 0 ? sum + v : sum, 0); }Вот суть решения. Но, почему это так сложно и вызывает затруднения? Цитата:
Согласно алгоритму, ответ вычисляется за один проход по массиву. Однако почему-то в теме считается, что что-то там можно неожиданно для всех оптимизировать до двух или даже трёх!!! проходов по массиву. Цитата:
Ещё мне интересно, почему утверждение «Кол-во чисел не превышает 100» вы переделываете в «Кол-во чисел не может быть больше 100»? Если последовательность составлена из чисел множества натуральных чисел N без нуля, то из утверждения «В последовательности всегда имеется число кратное 6» можно вывести утверждение «Сумма чисел кратных 6 не равна 0». Вы же почему-то сомневаетесь, что это так, и предполагаете, что «В последовательности всегда должно быть число кратное 6». Факты о входных данных дают вам гарантии. Пользователь может ввести последовательность натуральных чисел ⟨300, 300, 300, ..., 300⟩ состоящую из 100 элементов. Все числа кратны 6 и сумма равна 30000. Это гарантирует вам, как программисту на JavaScript, что результат вычислен верно, поскольку результат не больше наибольшего безопасного целого числа Number.MAX_SAFE_INTEGER. В типизированных языках это помогло бы выбрать необходимый числовой тип. Вот моё решение... (function main() { alert( "Программа, которая в последовательности натуральных " + "чисел определяет сумму всех чисел, кратных 6" ); var sum = 0; var n = +prompt("Введите количество чисел в последовательности"); var v; for(var i = 1; i <= n; i++) { v = +prompt("Введите число (" + i + " из " + n + ")"); if(v % 6 === 0) sum += v; } alert("Сумма чисел, кратных 6 – " + sum); })(); |
Часовой пояс GMT +3, время: 06:32. |