Проверьте мой код, пожалуйста, подскажите в чём ошибка
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
Строится троичная запись числа N.
Если N кратно 3, то в конец троичной записи числа дописываются три последние цифры троичной записи числа. Иначе в конец троичной записи числа дописывается остаток от деления n на 3, умноженный на 3, записанный в троичной записи.
Полученная таким образом запись является троичной записью искомого числа R. Укажите минимальное число N, после обработки которого автомат получает число, большее 150.
В ответе это число запишите в десятичной системе.
def to_3(n):
n3 = ""
while n > 0:
n3 += str(n % 3)
n = n // 3
return n3 [:: -1]
a = []
for n in range(1, 1000):
n3 = to_3(n)
if n % 3 == 0:
n3 += n3[:-3]
else:
n3 += to_3 ((n % 3) * 3)
r = int(n3, 3)
if r > 150:
a.append(r)
print(n)
Ответы (1 шт):
Ошибки две:
- Неправильный срез числа
- После нахождения нужного порога нужно просто сразу выводить число
nи выходить из цикла
def to_3(n):
n3 = ""
while n > 0:
n3 += str(n % 3)
n = n // 3
return n3 [:: -1] # <- здесь убрал табуляцию
#a = [] # <- не нужно
for n in range(1, 1000):
n3 = to_3(n)
if n % 3 == 0:
n3 += n3[-3:] # <- изменил срез
else:
n3 += to_3 ((n % 3) * 3)
r = int(n3, 3)
if r > 150:
#a.append(r) # <- не нужно
print(n) # <- добавил две табуляции
break # <- добавил break
Кроме того, поскольку у вас уже есть число в троичной форме, вы можете произвести проверки и дописывание по-другому - используя троичную запись чисел:
if n3[-1] == '0':
n3 += n3[-3:]
else:
n3 += n3[-1] + '0'