Как известно, одно из самых весёлых занятий для маленького ребёнка — звонить в случайные квартиры, используя домофон.
Мальчик Вася решил обзвонить квартиры в своём доме. Всего в доме 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, ответили мальчику, из-за чего он испугался и сразу же убежал. Теперь Васе интересно, как много квартир он успел обзвонить. Но он ещё очень маленький, поэтому посчитать количество квартир придётся вам.
1 Ответ
Решение задачи:
C++:
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- int main() {
- ll n, k; cin >> n >> k;
- int cnt = 0;
- for (int i = 1; i <= 9; ++i) {
- for (int j = i; j <= n; j = j * 10 + i) {
- ++cnt;
- if (j == k) {
- cout << cnt << «\n«;
- return 0;
- }
- }
- }
- }
Python:
n = int(input())
k = int(input())
cnt = 0
for i in range(1, 10):
j = i
while j <= n:
cnt += 1
if j == k:
print(cnt)
exit(0)
j = j * 10 + i