Автор | Сообщение |
|
Отправлено: 15.12.21 07:27. Заголовок: 12 - 272 (Джобс)
Здравствуйте, подскажите, пожалуйста, в чем ошибка? Что-то явно упускаю в рассуждениях. m=0 for x in range(1,200): for y in range (1,200): for z in range (1,200): s='1'*x+'3'*y+'13'*z while '12' in s or '13' in s: s=s.replace('12','21',1) s = s.replace('31', '23', 1) s = s.replace('13', '23', 1) if s.count('1')==0: summ=s.count('2')*2+s.count('3')*3 if summ==404: m=max(m,x+y+z*2) print(m) Программа либо долго выполняется, либо выдает неправильный ответ, Руками, конечно, задача решается недолго, но как ускорить программу ?
|
|
|
Ответов - 7
[только новые]
|
|
|
Отправлено: 15.12.21 07:58. Заголовок: Без программы рассуж..
Без программы рассуждения такие: заметим,что если будут стоять 13,то они заменятся на 23, и сумма 2+3=5 , тогда достаточно начальная строка около 160 элекментов. Поэтому нужно ,чтобы были сначала 1, а потом 3. заметим, 1113 превращается в 2223. Значит поставим две 3 и остальное 1. тогда 404-2*3=398. 398/2=199 значит 199 "1" и две "3" 199+2=201
|
|
|
|
| Администратор
|
Сообщение: 3093
|
|
Отправлено: 15.12.21 08:12. Заголовок: AnnaPershina пишет: ..
AnnaPershina пишет: цитата: | Руками, конечно, задача решается недолго, но как ускорить программу ? |
|
Не стоит решать такие задачи программой (методом грубой силы).
|
|
|
|
Отправлено: 21.12.21 03:34. Заголовок: Понятно. Спасибо...
Понятно. Спасибо.
|
|
|
|
Отправлено: 04.01.22 21:13. Заголовок: А можно сочетать рас..
А можно сочетать рассуждение и программу. В данном случае мы видим, что 2 цифры меняются на 2, значит в итоге цифр будет столько же, сколько было. В итоговой строке только двойки и тройки, т.е. 2*x+3*y=404. А вот x и y пусть подберет программа. x+y искомый результат.
|
|
|
|
Отправлено: 11.01.22 15:53. Заголовок: Рассуждения плюс Программа
Рассуждения Винниковой программа Паршиной (исправл.): .. #12.272 m=0 for x in range(1,300): for y in range (1,10): s='1'*x+'3'*y while '12' in s or '13' in s: s=s.replace('12','21',1) s = s.replace('31', '23', 1) s = s.replace('13', '23', 1) if s.count('1')==0: summ=s.count('2')*2+s.count('3')*3 if summ==404: m=max(m,x+y) print(m) # Rez = 201, t = 3 min . ,
|
|
|
|
Отправлено: 11.01.22 21:24. Заголовок: aln1947 пишет: Расс..
aln1947 пишет: цитата: | Рассуждения Винниковой программа Паршиной |
| После рассуждения можно, в данном случае, ограничиться этим: for d in range(1, 1000): for t in range(1, 1000): if 2*d+3*t == 404: print(d+t)
|
|
|
|
Отправлено: 01.03.22 07:44. Заголовок: Винникова пишет: fo..
Винникова пишет: цитата: | for d in range(1, 1000): for t in range(1, 1000): if 2*d+3*t == 404: print(d+t) |
| Очень, очень красивое решение!
|
|
|
|