Паскаль. Основы программирования


Задание 4


Составьте программу для решения обратной задачи: для нумерации страниц книги потребовалось k цифр (k - входное данное). Сколько страниц в книге? Если указанное число цифр не может служить для нумерации какого-либо количества страниц, то результат программы считайте равным 0.

Пример 8. Одна машинистка напечатала подряд без интервалов натуральные числа:

12345678910111213141516... .

Если подобным образом напечатать 1000 цифр, то какая цифра будет последней?

Решение

Решение будем выполнять по простой идее. Просматривать подряд числа, так как они пишутся машинисткой, подсчитывать сумму цифр каждого из чисел, находить общую сумму цифр и, когда она станет равна 1000, тогда прекратить процесс и выдать последнюю цифру на экран.

Но в этом алгоритме нас подстерегают некоторые неожиданности. Давайте проанализируем порядок записи машинисткой чисел.

Вначале пишутся однозначные числа - и здесь все в порядке, с помощью процедуру подсчитывается сумму цифр каждого однозначного числа (она равна 1), с помощью сумматора - 9 раз по 1 суммируется общее количество цифр.

Затем пишутся двузначные числа, процедура подсчета цифр будет выдавать сумму цифр 2 для каждого двузначного числа, а сумматор увеличиваться каждый раз уже сразу на 2 (90 раз), затем для трехзначных чисел - к сумматору будет прибавляться по 3 единицы. Возникает вопрос, где гарантия, что общая сумма цифр будет в точности равна 1000. Ведь очень даже может случиться, что после прибавления очередной двойки, тройки или четверки, общее число цифр "перепрыгнет" эту 1000-ю границу.

Как быть в таком случае? Это вызывает необходимость организовать цикл repeat ... until

... до тех пор, когда сумматор s станет больше заданной суммы цифр n

 Такое положение дел будет означать, что в последнем проверяемом числе (p)

имеются "лишние" и ненужные нам цифры:

       write('Введите число цифр '); readln(n);

       p := 1; s := 0;

       repeat

          number(p, v);

          s := s + v; p := p + 1

       until s >= n;




Начало  Назад  Вперед



Книжный магазин