Решение: Сумма чисел по основанию 7
Напишите программу, которая в последовательности натуральных десятичных чисел определяет сумму элементов, запись которых в системе счисления с основанием 7 оканчивается цифрой 6. Если среди входных данных таких элементов нет, программа должна вывести «NO».
Программа получает на вход в первой строке натуральное число $N$ ($3 \leq N \leq 10\,000$), затем $N$ натуральных чисел, не превышающих 30 000, каждое в отдельной строке.
Программа должна вывести одно число — сумму десятичных чисел, запись которых в 7-ричной системе счисления оканчивается цифрой 6, или «NO», если среди входных данных таких элементов нет.
Пример работы программы:
Входные данные:
5
20
13
9
28
12
Выходные данные:
33
Решение по шагам
5 шаговПоследняя цифра записи натурального числа в системе счисления с основанием 7 определяется остатком от деления этого числа на 7. Поэтому подходят числа, для которых выполняется условие $x \bmod 7 = 6$.
$$x \bmod 7 = 6$$Последовательно считываем все $N$ чисел. Для подходящих чисел увеличиваем сумму и количество найденных элементов.
$$S := S + x$$После обработки всей последовательности проверяем, были ли найдены подходящие элементы. Если нет, выводим «NO», иначе выводим сумму.
$$k = 0 \Rightarrow \text{вывести NO}$$Один из возможных вариантов программы на Python:
Программа работает за время $O(N)$ и использует $O(1)$ дополнительной памяти.
n = int(input())
s = 0
count = 0
for _ in range(n):
x = int(input())
if x % 7 == 6:
s += x
count += 1
if count == 0:
print("NO")
else:
print(s)
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Проверяют последнюю цифру десятичной записи вместо остатка от деления на 7.
Суммируют остатки от деления, а не исходные десятичные числа.
Не обрабатывают случай, когда подходящих чисел нет.
Считывают не все $N$ чисел.