Задача взята с сайта e-olymp.com.
Условие
Для нумерации страниц книги использовали цифр. По заданному вывести или , если решения не существует. Нумерация начинается с первой страницы.
Входные данные
Единственное число . В книге не более страницы.
Выходные данные
Искомое количество страниц.
Тесты :
N | 8 | 21 | 22 | 113 | 999 | 1001 |
M | 8 | 15 | 0 | 61 | 369 | 0 |
Код на Java:
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 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int m = 1; while (true) { if (m < 10) { //1 digit n -= 1; } else if (m < 100) { //2 digits n -= 2; } else if (m < 1000) { //3 digits n -= 3; } else { //4 digits n -= 4; } if (n < 0) { m = 0; } if (n <= 0) { break; } m++; } System.out.print(m); } } |
Ход решения:
Принимаем исходное количество страниц как 1.
В зависимости от , вычитаем необходимое количество цифр из :
11 12 13 14 15 16 17 18 19 |
if (m < 10) { //1 digit n -= 1; } else if (m < 100) { //2 digits n -= 2; } else if (m < 1000) { //3 digits n -= 3; } else { //4 digits n -= 4; } |
Далее проверяем условие выхода. Если при этом мы получили отрицательное значение , значит, исходное его значение также было неверным, тогда количеству страниц присваиваем 0:
20 21 22 23 24 25 |
if (n < 0) { m = 0; } if (n <= 0) { break; } |
Выйдя из цикла, выводим :
28 |
System.out.print(m); |
Ссылки:
Рабочий код для тестирования на Ideone.com: Ideone.com
Зачтено, но…
Не задумывались, есть ли способ вычислить одной формулой, без цикла?