На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение





Сообщение: 4
ссылка на сообщение  Отправлено: 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)


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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)


___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 5
ссылка на сообщение  Отправлено: 31.08.22 09:34. Заголовок: Спасибо, разобрался ..


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

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 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)

Спасибо: 0 
Цитата Ответить





Сообщение: 396
ссылка на сообщение  Отправлено: 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


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 482
ссылка на сообщение  Отправлено: 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)


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2250
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет