вторник, 2 октября 2012 г.

9 "Г" ВСЕМ ЧИТАТЬ!

Друзья мои, я и подумать не могла раньше,  что такие простенькие примеры мне придется самой за вас решать!
Спешу развеять темноту вашу тёмную и дремучесть дрёмную... :)

(задачи В6 для самостоятельного решения с сайта К.Ю.Полякова) 
В результате выполнения фрагмента программы
while n <> 0 do begin
  write ( 2*(n mod 5 + 3) );
  n := n div 10;
end;
на экран выведено число 10614. Какое число хранилось до этого в переменной n, если известно, что все цифры в нем нечетные?
 Мое решение


1.    В каком диапазоне лежат остатки от деления числа  на 5 (n mod 5)? Естественно (от 0..4).
2.    Тогда число  ( 2*(n mod 5 + 3) ) может находиться в диапазоне от 6 до 14.
3.    Исходя из этих соображений, можно разбить цепочку 10614 на отдельные числа ЕДИНСТВЕННЫМ СПОСОБОМ 10-6-14.
4.    Обозначим n mod 5= d1, тогда
    2*(d1+3)=10, где d1- ПЕРВАЯ цифра с конца! Выразив ее, находим что d1=2.
Внимание вопрос, если n mod 5=2, то чему может быть равно n, при условии (…что все цифры в нем нечетные). Ответ очевиден n=7
(вспоминаем, что эта цифра должна стоять на последнем месте в искомом  числе, т.к. 10 печатается первой)
5.    Рассуждая аналогично, находим среднюю и первую цифру.
6.    Получаем ответ 957.