Форум » Системы счисления » задание 14 № 5514 » Ответить

задание 14 № 5514

Pokholok_DS: Добрый день! Подскажите пожалуйста насколько оптимально мое решение, возможно ли упростить? [quote](И. Степанов) Операнды арифметического выражения записаны в системе счисления с основанием 44. 1x2344 + 32x144 В записи чисел переменной x обозначена неизвестная цифра из алфавита 44-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 42. Для найденного значения x вычислите частное от деления значения арифметического выражения на 42 и укажите его в ответе в десятичной системе счисления.[/quote] [pre2] ss='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh' def f(m,n): ten=0 for i in range(len(m)-1,-1,-1): ten+=ss.find(m[ i])*n**((len(m)-1)-i) return ten for x in ss: if (f(f'1{x}23',44) + f(f'32{x}1',44))%42==0: print((f(f'1{x}23',44) + f(f'32{x}1',44))//42)[/pre2]

Ответов - 5

Поляков: 1) в приведенном варианте ваша программа не работает 2) про оформление программ на форуме посмотрите текст на желтом фоне вверху - это можно сделать красиво 3) если сокращать "до упора", то можно, например, так: [pre2] ss='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh' def f(m, n): return sum( ss.find(c)*n**i for i, c in enumerate(m[::-1]) ) for x in ss: if (y := f(f'1{x}23',44) + f(f'32{x}1',44)) % 42 == 0: print( y // 42) [/pre2]

Pokholok_DS: Спасибо, разобрался с тем как выкладывать код, m[ i] пропало по этому проблема с правильной работой была

наиль: for x in range(0, 44): f = (4 * 44**3) + ((2 + x)*44**2) + ((2 + x)*44**1) + (4) if f % 42 ==0: print(f//42)


s11kai: наиль пишет: f = (4 * 44**3) + ((2 + x)*44**2) + ((2 + x)*44**1) + (4) Оригинальная идея, правда скобок слишком многовато, штук 8 можно удалить Но если следовать условию строго: "Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 42. Для найденного значения x вычислите частное от деления значения арифметического выражения на 42 и укажите его в ответе в десятичной системе счисления.", а не список значений! То решение должно быть таким: [pre2]for x in range(44,-1,-1): s = 1*44**3 + x*44**2 + 2*44 + 3 + 3*44**3 + 2*44**2 + x*44 + 1 if s%42 == 0: print(s//42) break [/pre2]

s11kai: наиль пишет: [pre2] for x in range(0, 44): f = (4 * 44**3) + ((2 + x)*44**2) + ((2 + x)*44**1) + (4) if f % 42 ==0: print(f//42) [/pre2] Недостаток данного алгоритма в том, что нам нужен ответ в единственном числе а не список чисел Поэтому, лучше так: [pre2] for x in range(45): s = 44**3 + x*44**2 + 2*44 + 3*44**3 + 2*44**2 + x*44 + 4 if s%42 == 0: k = s//42 print(k) [/pre2] или так: [pre2] for x in range(45): s = 4*44**3 + (2 + x)*44**2 + (2 + x)*44 + 4 if s%42 == 0: k = s//42 print(k) [/pre2]



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