Автор | Сообщение |
|
Отправлено: 30.08.22 22:10. Заголовок: задание 14 № 5514
Добрый день! Подскажите пожалуйста насколько оптимально мое решение, возможно ли упростить? цитата: | (И. Степанов) Операнды арифметического выражения записаны в системе счисления с основанием 44. 1x2344 + 32x144 В записи чисел переменной x обозначена неизвестная цифра из алфавита 44-ричной системы счисления. Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 42. Для найденного значения x вычислите частное от деления значения арифметического выражения на 42 и укажите его в ответе в десятичной системе счисления. |
| 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)
|
|
|
Ответов - 5
[только новые]
|
|
|
| Администратор
|
Сообщение: 3678
|
|
Отправлено: 30.08.22 23:45. Заголовок: 1) в приведенном вар..
1) в приведенном варианте ваша программа не работает 2) про оформление программ на форуме посмотрите текст на желтом фоне вверху - это можно сделать красиво 3) если сокращать "до упора", то можно, например, так: 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)
|
|
|
|
Отправлено: 31.08.22 09:34. Заголовок: Спасибо, разобрался ..
Спасибо, разобрался с тем как выкладывать код, m[ i] пропало по этому проблема с правильной работой была
|
|
|
|
Отправлено: 01.03.23 18:33. Заголовок: деревянный, но короче
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)
|
|
|
|
Отправлено: 12.04.23 12:36. Заголовок: Если строго следоват..
наиль пишет: цитата: | f = (4 * 44**3) + ((2 + x)*44**2) + ((2 + x)*44**1) + (4) |
| Оригинальная идея, правда скобок слишком многовато, штук 8 можно удалить Но если следовать условию строго: "Определите наибольшее значение x, при котором значение данного арифметического выражения кратно 42. Для найденного значения x вычислите частное от деления значения арифметического выражения на 42 и укажите его в ответе в десятичной системе счисления.", а не список значений! То решение должно быть таким: 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
|
|
|
|
Отправлено: 19.05.23 04:14. Заголовок: а можно и так: k = ..
наиль пишет:
цитата: | 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) |
| Недостаток данного алгоритма в том, что нам нужен ответ в единственном числе а не список чисел Поэтому, лучше так: 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) или так: 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)
|
|
|
|