Форум » Циклы, ветвления, рекурсия » способ решения B2 » Ответить

способ решения B2

lilizabeth: В результате фрагмента программы: while n<>0 do begin writeln (2*(n mod 5 + 3)); n:=n div 10; end. на экране выведено число 10614. какое число хранилось до этого в переменной n, если известно, что все цифры в нем нечетные? Решение: 1) прежде всего, заметим, что для вывода используется оператор write, который не переходит на следующую строку; поэтому числа в цикле будут выводиться в одной строке "вплотную" друг другу, без промежутков. 2) вспомним, что n mod 5 - остаток от деления числа на 5 - этопоследняя цифра числа в десятичной системе счисления, то есть 4. можно определить наибольшее число, которое выведет программа после первого круга : 2(n mod5 + 3)=2 * (4+3) = 14; 3) операция n div 10 (деление нацело на 10) равносильна отбразыванию последней цифры в десятичной системе счисления 4) эти две операции выполняются пока значение переменной n не станет равно нулю 5) определим разбивку выведенного числа 10614. Существует единственная разбивка : 10 6 14. Значит, выполняя операцию (2*(n mod 5)+3), последовательно получаем числа 10, 6, 14; 6) первое число 10 получаем : 2 * (n mod 5 +3) = 10, n mod 5 = 2, откуда n равняется 2 и 7, но в условии сказано, что все цифры числа нечетные. Значит последняя цифра числа 7; 7) Аналогично получаем другие две цифры: 2 * (n mod 5 +3) = 6, n mod 5 = 0, n = 5 - вторая цифра числа; 2 * (n mod 5 + 3) = 14, n mod 5 = 4, n=9 - первая цифра числа; 8) Таким образом, ответ 957

Ответов - 0



полная версия страницы