Решение: Подсчёт шестнадцатеричных чисел
Напишите программу подсчёта количества элементов последовательности натуральных чисел, запись которых в шестнадцатеричной системе счисления трёхзначна и оканчивается на цифру 9. В ответе запишите количество искомых элементов.
Программа получает на вход натуральные числа. Количество введённых чисел неизвестно, но не превышает 1000. Последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность).
Программа должна напечатать только одно число — количество искомых элементов последовательности.
| Входные данные | Выходные данные |
|---|---|
| 169 281 889 953 4121 0 | 3 |
Решение по шагам
4 шагаВ шестнадцатеричной системе счисления одна цифра соответствует одному разряду с основанием 16. Поэтому трёхзначные записи имеют значения от $16^2$ до $16^3 - 1$, то есть от 256 до 4095.
$$16^2 \leq n < 16^3$$Последняя цифра шестнадцатеричной записи равна остатку от деления числа на 16. Поэтому запись оканчивается на цифру 9, если остаток равен 9.
$$n \bmod 16 = 9$$Организуем цикл чтения чисел до появления 0. Если число удовлетворяет обоим условиям, увеличиваем счётчик. После завершения ввода выводим счётчик.
Один из возможных вариантов программы на Python:
$$count = 0\nwhile True:\n n = int(input())\n if n == 0:\n break\n if 256 <= n < 4096 and n % 16 == 9:\n count += 1\nprint(count)$$Программа должна проверять условия $256 \leq n < 4096$ и $n \bmod 16 = 9$ для каждого введённого числа до появления 0, затем вывести количество подходящих чисел.
Этот ответ получен в разборе, но не сверен с официальным ключом из банка — проверьте выкладки, прежде чем заучивать результат.
Где здесь ошибаются
Проверяют последнюю десятичную цифру числа вместо последней цифры шестнадцатеричной записи.
Включают число 0 в последовательность.
Используют верхнюю границу $16^3$, хотя число $16^3$ уже имеет четырёхзначную запись.
Проверяют только трёхзначность или только окончание записи, но не оба условия одновременно.