Задача:
Сколько натуральных $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):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a = sc.nextInt(); int b = sc.nextInt(); String s = new String(); if(a + b == 0){ System.out.print(0); } else{ if((a == b) | (a * b == 0)) System.out.print(1); else System.out.print(2); for (int i = 0; i < n - 1; i++){ s += '0'; } } System.out.print(s); } |
Код (Вариант 2):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int a = sc.nextInt(); int b = sc.nextInt(); int cond1 = a != b ? 1 : 0; int cond2 = a * b > 0 ? 1 : 0; String s = new String(); System.out.print(cond1 + cond2); for(int i = 1; i 0; ++i) System.out.print(0); } } |
Решение:
Среди однозначных чисел с каждой цифры начинается только одно число.
Среди двухзначных чисел с одной цифры начинается уже десять чисел.
Среди трехзначных — сто и так далее. Легко заметить закономерность, что в количестве чисел, начинающихся с определенной цифры, единица всегда остается, а к ней приписывают $n-1$ нулей, где $n$ — количество разрядов.
Если мы ищем количество чисел начинающихся уже с двух разных цифр, то единица меняется на двойку, а количество нулей сохраняется.
Отсюда и решение задачи — последовательная проверка всех вариантов и вывод ответа.
P.S. Данное решение не проходит тесты 12-19 на сайте e-olymp. Это происходит из-за того, что в этих тестах результат — это число с большим количеством нулей, а язык Java тратит много времени на их вывод. То есть, тесты не выполняются только из-за времени работы. Решение этой задачи на языке С++ проходит без проблем все тесты.