Задача:
Сколько натуральных $n$ -значных чисел начинаются с цифры $a$ или цифры $b$?
Входные данные:
Заданы три целых числа: натуральное $n$ [latex](0 \lt n \leqslant 10^6)[/latex] и целые $a$ и $b$. Все данные, как и само условие задачи, заданы в десятичной системе счисления.
Выходные данные:
Вывести количество натуральных $n$ -значных чисел, которые начинаются с цифры $a$ или цифры $b$.
Тесты:
Ввод | Вывод |
---|---|
3 3 4 | 200 |
1 2 2 | 1 |
4 0 0 | 0 |
10 9 9 | 1000000000 |
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> using namespace std; int main() { int n, a, b; cin >> n >> a >> b; string s; if (a + b == 0) cout << 0 << endl; else { if ((a == b) or !(a * b)) cout << 1; else cout << 2; for (int i = 0; i < n - 1; i++) s += '0'; cout << s << endl; } return 0; } |
Решение:
Среди однозначных чисел с каждой цифры начинается только одно число.
Среди двухзначных чисел с одной цифры начинается уже десять чисел.
Среди трехзначных — сто и так далее. Легко заметить закономерность, что в количестве чисел, начинающихся с определенной цифры, единица всегда остается, а к ней приписывают $n-1$ нулей, где $n$ — количество разрядов.
Если мы ищем количество чисел начинающихся уже с двух разных цифр, то единица меняется на двойку, а количество нулей сохраняется.
Отсюда и решение задачи — последовательная проверка всех вариантов и вывод ответа.
Хорошо, но не слишком лаконично. Я бы так это записал: