На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр троичной записи числа N делится на 3, то в этой записи два левых разряда заменяются на «112»;
б) если сумма цифр троичной записи числа N на 3 не делится, то эта сумма переводится в троичную систему счисления и дописывается в конец числа.
Полученная таким образом запись является троичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 11 = 1023 результатом является число 11223 = 44, а для исходного числа 12 = 1103 результатом является число 11023 = 38.
Укажите максимальное чётное число R, не превышающее 679, которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления.
Приведём решение на языке Python.
def f(n):
s=''
while n > 0:
s = str(n%3) + s
n //= 3
return s
c = []
for n in range(1000):
s = f(n)
summa = s.count('1') + s.count('2')*2
if summa%3 == 0:
s = '112' + s[2:]
else:
s = s + f(summa)
r = int(s,3)
if r <= 679 and r%2 == 0:
c.append(r)
print(max(c))
Ответ: 662.
Приведём решение Сергея Донец на PascalABC:
uses School;
begin
var maxR := -MaxInt;
for var n := 1 to 1000 do
begin
var t := ToBase(n, 3);
var sumDig := Digits(n,3).Sum;//0;
if sumDig mod 3 = 0
then t:='112'+t?[3:]
else t := t + ToBase(sumDig, 3);
var r := Dec(t, 3);
if (r<=679)and(r mod 2 =0)and(r>maxR) then maxR := r;
end;
Println(maxR);
end.

