Задача взята с сайта e-olymp.com.
Условие
Для нумерации $M$ страниц книги использовали $N$ цифр. По заданному $N$ вывести $M$ или $0$, если решения не существует. Нумерация начинается с первой страницы.
Входные данные
Единственное число $N$. В книге не более $1001$ страницы.
Выходные данные
Искомое количество страниц.
Тесты :
$N$ | $8$ | $21$ | $22$ | $113$ | $999$ | $1001$ |
$M$ | $8$ | $15$ | $0$ | $61$ | $369$ | $0$ |
Код на Haxe:
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 |
class Test { public var n:Int; public function new(n) { this.n = n; } static function main() { var tests = new Array(); tests.push(new Test(8)); tests.push(new Test(21)); tests.push(new Test(22)); tests.push(new Test(113)); tests.push(new Test(999)); tests.push(new Test(1001)); var i:Test; for (i in tests) { var n:Int = i.n; var m:Int = 0; while (n > 0) { m++; 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; } } trace(m); } } } |
Ход решения:
Принимаем исходное количество страниц $M$ как $0$ и увеличиваем его в начале каждой итерации цикла. Цикл будет идти, пока мы не исчерпаем заданное количество цифр $N$, вычитаем необходимое их количество в зависимости от $M$:
19 20 21 22 23 24 25 26 27 28 29 30 |
var m:Int = 0; while (n > 0) { m++; 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; } |
Далее проверяем условие корректности исходных данных: если мы получили отрицательное значение $N$, значит, исходное его значение также было неверным, тогда количеству страниц присваиваем $0$:
31 32 33 |
if (n < 0) { m = 0; } |
Выйдя из цикла, выводим $M$:
35 |
trace(m); |
Примечание: Входные данные для тестирования были заданы программно из-за определенных затруднений в использовании стандартного ввода в онлайн-среде try.haxe.org.
Ссылки:
Рабочий код для тестирования на try.haxe.org: Try Haxe !
- e-olimp 3966. An ardent collector of butterflies - 13.06.2017
- e-olymp 1078. The line degree - 12.06.2017
- A704 - 11.06.2017
Не нужно использовать магических чисел ( 0…6). Используйте размер хранилища данных.
Исправил.