Скучные квартиры задание на python
Скучные квартиры
Ограничение по времени: 1
секунда
Ограничение по памяти: 256
мегабайт
Как известно, одно из самых весёлых занятий для маленького ребёнка —
звонить в случайные квартиры, используя домофон.
Мальчик Вася решил обзвонить квартиры в своём доме. Всего в доме n
квартир, которые пронумерованы целыми числами от 1
до n
. Мальчик решил звонить только в квартиры со скучными номерами. Номер называется скучным, если и только если он состоит из одинаковых цифр. Например, квартиры с номерами 222
, 1
и 999
являются скучными, а квартиры с номерами 42
и 20
—
не являются.
Для того чтобы Васе было весело, он решил обзванивать квартиры в следующем порядке. Сначала мальчик обзвонит все квартиры с номерами, состоящими только из единиц, в порядке возрастания номеров квартир. Затем он обзвонит все квартиры с номерами, состоящими только из двоек, в порядке возрастания номеров, и так далее. Таким образом, последовательность номеров квартир, в которые будет звонить мальчик, окажется следующей:
1
, 11
, 111
, ...
, 2
, 22
, 222
, ...
, 3
, 33
, 333
, . . . , 4
, 44
, 444
, ...
, 5
, 55
, 555
, ...
, 6
, 66
, 666
, ...
, 7
, 77
, 777
, ...
, 8
, 88
, 888
, ...
, 9
, 99
, 999
, ...
Шалость Васи могла бы продолжаться долго, но люди, живущие в квартире с номером k
, ответили мальчику, из‑за чего он испугался и сразу же убежал. Теперь Васе интересно, как много квартир он успел обзвонить. Но он ещё очень маленький, поэтому посчитать количество квартир придётся вам.
Формат входных данных
Первая строка содержит одно целое число n
(1⩽n⩽109)
—
количество квартир в доме.
Вторая строка содержит одно целое число k
(1⩽k⩽n)
—
номер квартиры, жители которой ответили Васе. Гарантируется, что k
является скучным номером.
Формат выходных данных
Выведите одно целое число —
количество квартир, которое успел обзвонить Вася. Обратите внимание, что квартира с номером k
также должна быть учтена.
Система оценки
Решения, правильно работающие, если n
является скучным номером, будут оцениваться не менее чем в 40
баллов.
Решения, правильно работающие, если n⩽1000
, будут оцениваться в 60
баллов.
Замечание
В доме из первого примера 100
квартир, а Васе ответили жители 22
-й квартиры. То есть Вася успел позвонить в квартиры 1
, 11
, 2
и 22
(именно в таком порядке), после чего убежал.
В доме из второго примера 10
квартир, и Васе ответили жители квартиры 1
.
В доме из третьего примера 100
квартир, а Васе ответили жители 99
-й квартиры. Поэтому он позвонил во все квартиры с двузначными и однозначными скучными номерами.
Ввод
Вывод
100
22
4
10
1
1
100
99
18
n = int(input())
k = int(input())
count = 0
r = len(str(k)) # колво разрядов k
for flat in range(1, 10):
flatc = flat # копируем "скучную" цифру квартиры
while flatc <= k:
count += 1
if flatc == k:
print(count)
exit(0)
flatc = flatc * 10 + flat
# Ввод количества квартир в доме и номера квартиры, в которой ответили
n = int(input())
k = int(input())
# Функция для подсчета количества квартир с одинаковыми цифрами
def count_boring_apartments(digits, k):
count = 0
for i in range(1, n + 1):
if int(str(digits) * i) <= n:
count += 1
else:
break
return count
# Подсчет количества скучных квартир с одинаковыми цифрами
total_count = 0
for digit in range(1, 10):
if digit == k:
total_count += count_boring_apartments(digit, k)
else:
total_count += count_boring_apartments(digit, k)
# Вывод результата
print(total_count)
n = int(input()) # Количество квартир в доме
k = int(input()) # Номер квартиры, в которой ответили Васе
# Функция для подсчета количества скучных номеров заданной длины length
def count_boring_numbers(length):
return 9 * 10**(length - 1)
# Определяем количество цифр в номере k
k_length = len(str(k))
# Считаем количество скучных номеров с меньшей длиной
total_boring_numbers = 0
for length in range(1, k_length):
total_boring_numbers += count_boring_numbers(length)
# Считаем количество скучных номеров с длиной k_length и меньше, которые Вася бы обзвонил
total_boring_numbers += (k - 10**(k_length - 1) + 1) * k_length
print(total_boring_numbers)