Решение: Подсчёт шестнадцатеричных чисел
Напишите программу подсчёта количества элементов последовательности натуральных чисел, запись которых в шестнадцатеричной системе счисления трёхзначна и оканчивается на цифру B. Программа получает на вход натуральные числа. Количество введённых чисел неизвестно, но не превышает 1000. Последовательность чисел заканчивается числом 0, которое не входит в последовательность. Программа должна напечатать только одно число — количество искомых элементов последовательности.
Пример входных данных: 171, 283, 891, 955, 4123, 0. Пример выходных данных: 3.
Решение по шагам
4 шагаВ шестнадцатеричной системе счисления трёхзначные числа начинаются с $16^2 = 256$ и заканчиваются числом $16^3 - 1 = 4095$.
$$256 \leq n \leq 4095$$Последняя цифра шестнадцатеричной записи определяется остатком от деления на 16. Цифре B соответствует десятичное значение 11.
$$n \bmod 16 = 11$$Организуем цикл чтения чисел до появления нуля. Для каждого числа, удовлетворяющего обоим условиям, увеличиваем счётчик.
Для примера подходят числа 283 = 11B, 891 = 37B и 955 = 3BB. Число 171 имеет двухзначную запись AB, а 4123 — четырёхзначную запись 101B.
n = int(input())
count = 0
while n != 0:
if 256 <= n <= 4095 and n % 16 == 11:
count += 1
n = int(input())
print(count)
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Учитывают число 0 как элемент последовательности.
Проверяют только последнюю цифру и не проверяют, что запись имеет ровно три шестнадцатеричные цифры.
Используют остаток от деления на 10 вместо остатка от деления на 16.
Включают в диапазон число 4096, которое записывается как 1000 в шестнадцатеричной системе.