Как лучше всего на js написать этот код?
Как написать этот код? Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел равна 23. Найдите сумму всех чисел меньше 1000, кратных 3 или 5.
Как написать этот код? Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел равна 23. Найдите сумму всех чисел меньше 1000, кратных 3 или 5.
var sum= 0;
for (i =0; i<= 1000; i++) {
if (i%3 == 0 || i%5 == 0)
{sum+= i}
}
alert ("Сумма чисел кратных 5 или 3 до 1000 равна " + sum)
Две палки рядом это оператор ИЛИ т. е. Если или одно или другое верно - то выполняется то что в if. Есть еще оператор И. && - при нем должно быть и то и то истинно
Сумма арифметической прогрессии от 3 до 1000 с шагом 3
плюс сумма арифметической прогрессии от 5 до 1000 с шагом 5
минус сумма арифметической прогрессии от 15 до 1000 с шагом 15 (т. е. 3*5)
alert(3 * (1 + Math.floor(1000 / 3)) * Math.floor(1000 / 3) / 2 +
5 * (1 + Math.floor(1000 / 5)) * Math.floor(1000 / 5) / 2 -
15 * (1 + Math.floor(1000 / 15)) * Math.floor(1000 / 15) / 2);
И никаких циклов.
Лучше всего смотреть, что про это думает математика, потом браться за грубый перебор)
3 + 6 + ___ + 996 + 999 = 3 * (1 + ___ + 333)
5 + 10 + ___ + 990 + 995 = 5 * (1 + ___ + 199)
Простые арифметические прогрессии. Надо учесть, что 15 + 30 + 45 ...посчитались дважды, т. к. кратны и 3, и 5. и вычесть одну такую сумму. Ответ:
alert( (3 * 334 * 333 + 5 * 200 * 199 - 15 * 67 * 66) / 2 ); // 233168
А перебором, так:
let sum = 0;
for (let i = 0; i < 1000; i++) {
if (i % 3 == 0 || i % 5 == 0) sum += i;
}
alert (sum); // 233168
Переменную `i` в цикле обязательно надо объявлять. Оно может работать и без этого, но приводит к интересным сюрпризам с бесконечными циклами)