Top.Mail.Ru
Ответы

Задание 5 из егэ по информатике

for n in range(1, 100):
s = n
n3= ''
a3 = ''
b3 = ''
c3 = ''
while n > 0:
n3 += str(n % 3)
n //= 3
n3 = n3[::-1]
a = str(n3).count('2')
b = str(n3).count('1')
c = str(n3).count('0')
while a > 0:
a3 += str(a % 3)
a //= 3
a3 = a3[::-1]
while b > 0:
b3 += str(b % 3)
b //= 3
b3 = b3[::-1]
while c > 0:
c3 += str(c % 3)
c //= 3
c3 = c3[::-1]
n1 = n3 + a3 + b3 + c3
r10 = int(n1, 3)
if r10 < 1000:
max_n = s
print(max_n)
На вход алгоритма подаётся натуральное число
В полученной записи вычисляется количество цифр 2. Это число переводится в троичный вид и дописывается справа
В полученной записи вычисляется количество цифр 1. Это число переводится в троичный вид и дописывается справа
В полученной записи вычисляется количество цифр 0. Это число переводится в троичный вид и дописывается справа
Полученная таким образом запись является троичной записью искомого числа
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число
R, меньшее 1000 .В ответе запишите это число в десятичной системе счисления.
Исправьте пожалуйста программу,ответ не совпадает(должно получится 36)

По дате
По рейтингу
Аватар пользователя
Высший разум
5мес

Ответ НЕ может быть 36:

12345
 36₁₀ = 1100₃
Двоек 0 - получаем: '1100' + '0' = '11000'
Единиц 2 - получаем: '11000' + '2' = '110002'
Нолей 3 - получаем: '110002' + '10' = '11000210'
11000210₃ = 2937₁₀ 

Код:

123456789101112
 def to3(n): 
  res = '' 
  while True: 
    res = str(n % 3) + res 
    n //= 3 
    if n == 0: return res 
 
for i in range(37, 0, -1):
  v = to3(i) 
  for d in '210': v += to3(v.count(d)) 
  if int(v, 3) < 1000: break
print(i) 

Искомое число не может быть больше 37, т.к. в процессе преобразования к нему добавляются минимум 3 троичных разряда (т.е. число умножается на 27).