Задача
Найти количество $N$-значных чисел, у которых сумма цифр равна их произведению. Вывести наименьшее среди таких чисел для заданного $(N<10).$
Вводные данные
Число не превышающее $N.$
Выходные данные
В выходном файле через пробел вывести $2$ числа: количество искомых чисел и наименьшее среди них.
Тесты
Входные данные | Выходные данные |
$1$ | $10$ $0$ |
$2$ | $1$ $22$ |
$4$ | $12$ $1124$ |
$5$ | $40$ $11125$ |
$9$ | $144$ $111111129$ |
Код программы(Цикл)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); double n = in.nextDouble(); boolean minNumberPrinted = false; int count = 0; int minNumber = 0; if(n == 1) System.out.println(10 + " " + 0); else { if(n>1 & n<8) { for(int i = (int)Math.pow(10, n-1); i 0) { int digit = number % 10; sum += digit; mult *= digit; number /= 10; } if(sum == mult & minNumberPrinted == false) { minNumber = i; count++; minNumberPrinted = true; } else { if(sum == mult) count++; } } System.out.print(count + " " + minNumber); } else { if(n == 8) System.out.print(224 + " " + 11111128); if(n == 9) System.out.print(144 + " " + 111111129); } } } } |
Решение задачи(Цикл)
Для cлучаев, когда $N=1,$ $N=8$ и $N=9$ сделаем отдельные ситуации и выведем сразу результат, т.к. эти значения долго считаются в основном цикле. Для случаем, когда $1<N<8$ создадим цикл, который создает последовательность $N$-значных чисел. Затем в цикле while (number > 0) считаем сумму и произведение цифр каждого числа из последовательности. Если сумма и произведение равны и переменная minNumberPrinted равна false, (т.e. не найдено еще минимальное число из этой последовательности, что его сумма и произведение цифр равны), то переменной minNumber присвоим минимальное найденное число. Иначе, если сумма и произведение цифр числа равно, просто прибавляем счетчику $1.$ Выводим полученный результат. Задача решена.
Код программы (Массив)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { Scanner in = new Scanner(System.in); int[] x = {10,0,1,22,6,123,12,1124,40,11125,30,111126,84,1111127,224,11111128,144,111111129}; int n; n = in.nextInt(); System.out.print(x[2*n-2] + " " + x[2*n-1]); } } |
Решение задачи(Массив)
Для решения задачи заранее просчитали все ответы и записали их в массив x. Так как ответы идут подряд составили формулу для вывода искомых значений: для количества чисел у которых сумма цифр совпадает с их произведением — $2n-2,$ для минимального числа — $2n-1.$ Задача решена.
Ссылки
Условие задачи на e-olymp
Код решения 1 на ideone.com (цикл)
Код решения 1 на ideone.com (массив)