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

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

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

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



Сообщение: 42
ссылка на сообщение  Отправлено: 15.12.21 07:38. Заголовок: 23-123


Подскажите,пожалуйста, в чем ошибка.3
123) (Е. Джобс) Исполнитель Остаточек преобразует числа и имеет следующие команды:
1. Прибавить 1
2. Умножить на 2
3. Прибавить остаток от деления на 4
Первая команда увеличивает число на единицу, вторая – увеличивает вдвое, третья команда добавляет к числу значение остатка от деления этого числа на 4. Определите, сколько существует чисел, из которых Остаточек может получить число 80 с помощью программы длиной не более 5 команд.

 
rez=set()
def f(x, y):
global rez
if x == y:
return 1
if x > y:
return 0
if x < y:
return f(x +1, y) + f(x *2, y)+f(x + x%4, y)
k=0
while i < 80:
u=i
if f(u,80)<=5:
rez.add(i)
i+=1
print(len(rez))




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





Сообщение: 12
ссылка на сообщение  Отправлено: 17.12.21 13:54. Заголовок: Потому что Вы считае..


Потому что Вы считаете количество списков команд, которыми возможно дойти из u в 80.
А нужно подсчитать количество уникальных чисел (u), из которых можно прийти в 80 списком команд, не превышающим длину 5.

Например, из a в b можно прийти с помощью 2 списков команд (то, что вы считаете с помощью f). Но при этом длина каждого списка команд может как превышать 5, так и нет - Вы никак это проверить не можете с помощью Вашего кода.

Эта задача на динамическое программирование, а не на перебор вариантов.

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



Сообщение: 48
ссылка на сообщение  Отправлено: 21.12.21 03:36. Заголовок: Спасибо. Буду пробов..


Спасибо. Буду пробовать.

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





Сообщение: 476
ссылка на сообщение  Отправлено: 21.12.21 23:24. Заголовок: Вариант решения


Вариант решения:
 цитата:
def f(x): 
L = [x]
for k in range(5):
n = len(L)
for i in range(n):
L.append(L[0]+1)
L.append(L[0]*2)
L.append(L[0]+(L[0]%4))
L.remove(L[0])
return 80 in L

print(len([x for x in range(81) if f(x)]))



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



Сообщение: 13
ссылка на сообщение  Отправлено: 22.12.21 10:33. Заголовок: polyakovss, а что в ..


polyakovss, а что в Вашем решении от динамического программирования? Это же обычный перебор, а задача вроде как на ДП.

Не хочется заранее давать ответ, чтобы человек мог подумать, но есть, как минимум, 2 варианта сохранения промежуточных значений, которые работают существенно быстрее Вашего перебора (последний вариант Ваш):



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



Сообщение: 1
ссылка на сообщение  Отправлено: 23.12.21 13:19. Заголовок: beep, т.е. нужно что..


beep, т.е. нужно что бы человек заново изобрёл колесо. Тогда зачем ему вообще этот форму? Если знаете решение, то можно хотя бы описать словесный алгоритм. Не все школьники гении динамического программирования, как ни странно...

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



Сообщение: 16
ссылка на сообщение  Отправлено: 23.12.21 21:05. Заголовок: Permannent, а в чем ..


Permannent, а в чем смысл списывать при самостоятельной подготовке? Я понимаю, если бы это был экзамен, например. Самостоятельная работа и решение задач на тему это буквально и есть изобретение колеса. Весь смысл в том, чтобы понять, как это колесо создать, а не взять готовое.

Мне не сложно и конкретный код выложить, и дать описание на псевдокоде. Но это называется спойлерить. Не все хотят сразу готовый ответ, многие захотят дойти до ответа самостоятельно.

В ДП нет ничего гениального, наоборот, этот прием лежит на поверхности. Смысл ДП заключается в том, чтобы постоянно сохранять промежуточные результаты и пользоваться ими во время новых расчетов. Что в данной задаче нужно высчитывать каждый раз и какие промежуточные значения можно сохранять? Нам нужно из пункта A прийти в пункт B, используя для перемещения 3 функции. При этом шагов мы можем сделать не больше 5. Какие промежуточные значения можно сохранять?

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





Сообщение: 553
ссылка на сообщение  Отправлено: 23.12.21 14:40. Заголовок: Не все школьники ген..



 цитата:
Не все школьники гении динамического программирования, как ни странно...



Эта задача не требует ничего гениального.
Если ученик не может понять как её решить, то ему следует получше изучить алгоритмы и идеи в них.

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

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