Наиболее круглое число
Назовем число более круглым, чем другие числа, если оно имеет больше заключительных нулей. Если два числа имеют одинаковое количество заключительных нулей, то более круглым считается меньшее число.
Входные данные
В первой строке входных данных задано количество чисел $N$ $(1 ≤ N ≤ 100)$. Каждая из последующих $N$ строк содержит одно число в пределах от $1$ до $10^{9}$.
Выходные данные
Вывести наиболее круглое число среди заданных $N$ чисел.
Тесты
ВХОДНЫЕ ДАННЫЕ | ВЫХОДНЫЕ ДАННЫЕ |
4 71200 10 200 10001 |
200 |
5 711 1 2 10001 234567 |
1 |
10 7 1 2 1 2 3 4 6 8 9 |
1 |
4 100000 200000 500000 800000 |
100000 |
Код программы
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 |
import java.util.*; import java.lang.*; import java.io.*; import java.util.Scanner; class Main { public static void main (String[] args) throws java.lang.Exception { int n, e, k=0, m, maxk = 0, maxn = 1000000000, p = 1; Scanner in = new Scanner(System.in); e = in.nextInt(); while (e -- > 0) { n = in.nextInt(); if (p <= n){ m = n; k = 0; while ((n % 10) == 0) { //считает нули n = n / 10; k ++; } if (maxk < k) { maxn = m; maxk = k; p = 1; for (int i = 1; i < maxk; i ++) { p *= 10; } } else if (maxk == k) { if(maxn > m) maxn = m; } } } System.out.print(maxn); } } |
Решение задачи
Имеет смысл проверять каждое введенное число: не является ли оно меньше либо равно чем $p$, где $p$ — наименьшее число с количеством нулей равным $maxk$. $maxk$ — текущее наибольшее количество нулей. Для того, чтобы найти $p$, мы в цикле умножаем $1 maxk$-раз на $10$. Очевидно, что $p$ нужно менять только тогда, когда меняется $maxk$, также следует до цикла полагать $p = 1$. Для того чтобы $p$ не умножалось на $10$ лишнее количество раз. Таким образом мы отсеиваем заведомо негодные числа и ускоряем код.
Положим $maxn$ — наиболее круглое число.
Так как по условию числа не могут быть больше чем $10^{9}$, имеет смысл изначально поставить переменную $maxn = 10^{9}$. Это делается для того случая, когда во всех числах $m$ не будет нулей и нужно будет выбрать наименьшее. Если мы положим в переменную $maxn$ любое другое число то $maxn$ может быть меньше чем $m$ и мы не сможем выбрать ответ так как все $m$ будут больше его.