Матч
403, Счастливые числа (TheLuckyNumbers)
Дивизион 2,
Уровень 2
Цифры 4 и 7 являются счастливыми,
а остальные – нет. Число называется счастливым, если оно содержит только
счастливые цифры. Определить количество счастливых чисел в интервале от a до b
включительно.
Класс: TheLuckyNumbers
Метод: int count(int a, int b)
Ограничения: 1 £ a, b £ 109.
Вход. Целые числа a и b.
Выход. Количество счастливых чисел в интервале от a до b
включительно.
Пример входа
a |
b |
1 |
10 |
11 |
20 |
1000000 |
5000000 |
Пример выхода
2
0
64
РЕШЕНИЕ
рекурсия + перебор
Будем генерировать все числа,
состоящие только из 4 и 7, при помощи рекурсии. Если очередное сгенерированное
число x лежит в промежутке [a .. b],
то добавляется 1 к общей сумме. Если x
> b, то приписыванием к x справа 4 и 7 уже нельзя получить
счастливых чисел в промежутке [a .. b]. Если счастливое число x £ b, то числа 10 * x + 4 и 10 * x + 7
являются также счастливыми.
ПРОГРАММА
#include <stdio.h>
int solve(int a, int b, long long x)
{
return (x <= b) ? (a <= x && x <= b)
+ solve(a, b, 10 * x + 4) +
solve(a, b, 10 * x + 7) : 0;
}
class TheLuckyNumbers
{
public:
int count(int a, int b)
{
return solve(a,b,0);
}
};