Здравствуйте, VI12!
1) Что делает предложенный алгоритм? Пока в числе x, переведенном в девятеричную систему счисления, есть хотя бы одна цифра, в цикле выполняются следующие действия: отбрасывается последняя цифра в девятеричном представлении числа x (x := x div 9), а потом, если число x нечетное (x mod 2 > 0), переменная «a» увеличивается на последнюю цифру девятеричного представления числа x (a := a + x mod 9). В переменной b подсчитывается количество цифр в девятеричном представлении числа x.
2) Для систем счисления с нечётным основанием (3, 5, 7, 9, ...) справедливо утверждение: число, записанное в системе счисления с нечетным основанием чётно тогда и только тогда, когда сумма всех его цифр чётна (поэтому судить о чётности числа по чётности его последней цифры в системе счисления с нечётным основанием нельзя).
Следовательно, число 13 состоит из 2 нечетных цифр (при каждом отбрасывании последней цифры в девятеричном представлении числа x сумма цифр должна оставаться нечетной).
Поскольку нужно найти наибольшее натуральное число, то это цифры 7 и 6 (сначала их сумма равна нечетному числу 13, а затем после отбрасывания последней цифры сумма цифр числа равна нечетному числу 7).
3) Почему число 13 состоит из 2 цифр? Нужно обратить внимание на то, что из трех цифр в девятеричном представлении числа x последняя цифра числа была отброшена сразу (x := x div 9)
и в анализе числа (x mod 2 > 0) не участвовала.
При любой последней цифре в девятеричном представлении числа x и выполнении пункта 2 алгоритм печатает сначала 13, а потом 3. Но так как нужно найти наибольшее натуральное число, то выберем цифру 8.
Получилось девятеричное число 768
9 = 629
10.
Ответ: 629.
Посмотрите разбор заданий Р-11 и Р-10 в ege20.doc,
а также
здесь (polyakovss Сообщение: 55 N118 и N119) и
здесь.
Попробуйте решить две
мои аналогичные задачи:
Укажите количество натуральных чисел, при вводе которых алгоритм печатает сначала 2, а потом 3.
var x, a, b: longint;
begin
readln(x);
a := 0; b := 0;
while x > 0 do begin
x := x div 9;
if x mod 2 > 0 then
a := a + 1;
b := b + 1;
end;
writeln(a);
writeln(b);
end.
Ответ: 180.
Укажите количество натуральных чисел, при вводе которых алгоритм печатает сначала 1, а потом 3.
var x, a, b: longint;
begin
readln(x);
a := 0; b := 0;
while x > 0 do begin
x := x div 9;
if x mod 2 > 0 then
a := a + 1;
b := b + 1;
end;
writeln(a);
writeln(b);
end.
Ответ: 288.