Шешімі: Сумма чисел, кратных 17
Напишите программу, которая в последовательности целых чисел находит сумму и количество чисел, кратных 17, или сообщает, что таких чисел нет. На вход программы подаются целые числа, количество введённых чисел неизвестно, последовательность заканчивается числом 0. Число 0 является признаком окончания ввода и не входит в последовательность.
Количество чисел не превышает 100. Введённые числа по модулю не превышают 300. Программа должна вывести сумму и количество чисел, кратных 17, или вывести `NO`, если таких чисел в последовательности нет.
В ответе приведите программу и кратко объясните принцип её работы.
Шешім по шагам
5 қадамВведём переменные для суммы найденных чисел и их количества. Изначально обе величины равны нулю.
$$s = 0,\quad k = 0$$Будем последовательно считывать числа. Если введено 0, цикл завершается, поскольку 0 не является членом последовательности.
$$x = 0 \Rightarrow \text{конец цикла}$$Для каждого другого числа проверяем остаток от деления на 17. Если остаток равен нулю, число кратно 17: добавляем его к сумме и увеличиваем счётчик.
$$x \bmod 17 = 0 \Rightarrow s := s + x,\quad k := k + 1$$После завершения ввода проверяем, были ли найдены подходящие числа. Если нет, выводим `NO`; иначе выводим сумму и количество.
$$k = 0 \Rightarrow \text{NO}$$Один из нұсқа программы на Python:
s = 0
k = 0
while True:
x = int(input())
if x == 0:
break
if x % 17 == 0:
s += x
k += 1
if k == 0:
print('NO')
else:
print(s, k)
Бұл жауап талдау нәтижесінде алынды, бірақ банктің ресми кілтімен тексерілген жоқ — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Учитывают число 0 как элемент последовательности.
Проверяют кратность по условию x / 17 == 0 вместо x % 17 == 0.
Выводят NO при нулевой сумме, хотя подходящие числа могли быть, например, отрицательными и взаимно уничтожить сумму.
Забывают увеличить количество найденных чисел.
Не обрабатывают отрицательные числа, хотя условие допускает их.