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

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

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

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





Сообщение: 9
ссылка на сообщение  Отправлено: 23.11.22 17:15. Заголовок: 5543 опечатка в формулировке


(№ 5543) (М. Шагитов) Исполнитель преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
1. Прибавь 2
2. Умножь на 3
3. Умножь на 4
Выполняя первую из них, исполнитель увеличивает число на экране на 3(!!!!!!<- здесь опечатка), выполняя вторую – умножает на 3, выполняя третью – умножает на 4. Программой для исполнителя называется последовательность команд. Сколько существует различных программ, которые преобразуют исходное число 1 в число 600, и при этом траектория вычислений не содержит двух идущих подряд нечётных чисел.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 5 [только новые]


Администратор




Сообщение: 3805
ссылка на сообщение  Отправлено: 15.12.22 19:58. Заголовок: Спасибо, исправлено...


Спасибо, исправлено.

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



Сообщение: 1
ссылка на сообщение  Отправлено: 20.01.23 18:51. Заголовок: Поляков Здравствуйт..


5544
Выполняя первую из них, исполнитель увеличивает число на экране на 2, выполняя вторую – умножает на 3, выполняя третью – умножает на 4. Программой для исполнителя называется последовательность команд. Сколько существует различных программ, которые преобразуют исходное число 1 в число 600, и при этом траектория вычислений (включая начальное число) содержит три подряд идущих числа, сумма которых кратна 11
Поляков
Здравствуйте. Если я пишу tr = tr + [start], то выводит правильный ответ. А если tr.append(start), то неправильный. В чем разница?
 def f(start, end, tr = []): 
# tr.append(start)
tr = tr + [start]
if start == end:
for i in range(len(tr)-2):
if (tr[ i] + tr[i+1] + tr[i+2]) % 11 == 0:
return 1
return 0
if start > end:
return 0
return f(start + 2, end, tr) + f(start * 3, end, tr) + f(start * 4, end, tr)

print(f(1, 600)


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




Сообщение: 3809
ссылка на сообщение  Отправлено: 20.01.23 19:02. Заголовок: Mathew131 пишет: Есл..


Mathew131 пишет:
 цитата:
Если я пишу tr = tr + [start], то выводит правильный ответ. А если tr.append(start), то неправильный. В чем разница?


Хороший вопрос. Если вы ставите пустой массив в качестве значения параметра по умолчанию, то он будет единый для всех вызовов функции, а там всякая ерунда получается.
tr = tr + [start] - тут вы создаете каждый раз новый массив, все нормально
tr.append(start) - тут вы добавляете новое значение в хвост существующего массива, он один на все вызовы.
Лучше делать так:
 def f(start, end, tr = None): 
if tr is None: tr = []
...
Тогда tr.append(start) тоже будет работать.

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



Сообщение: 6
ссылка на сообщение  Отправлено: 03.02.23 22:04. Заголовок: Предлагаю "безопасное" решение задачи 5544


Предлагаю не пользоваться параметрами по умолчанию, что чревато неожиданными сюрпризами. Перепишем программу автора Mathew131 следующим образом:
 
def f(value, end, tr):
if value == end:
for k in range(len(tr)-2):
if (tr[k] + tr[k+1] + tr[k+2]) % 11 == 0:
return 1
return 0
if value > end:
return 0
return f(value + 2, end, tr+[value]) \
+ f(value * 3, end, tr+[value]) \
+ f(value * 4, end, tr+[value])

print(f(1, 600, []))


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




Сообщение: 3895
ссылка на сообщение  Отправлено: 15.02.23 10:46. Заголовок: gutgut пишет: Предла..


gutgut пишет:
 цитата:
Предлагаю не пользоваться параметрами по умолчанию, что чревато неожиданными сюрпризами.

AFAIK, только если значение по умолчанию - массив. Или еще когда-то?

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

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