![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
reill |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 52 Репутация: ![]() ![]() ![]() |
Записать выражение :
1 операция 2 операция 3 операция 4 операция 5 операция 6 операция 7 операция 8 операция 9 операция =100, т.е. цифры, от 1 до 9 соединить арифметическими операциями +,-,*,/ так, чтобы результат получился равным 100.Есть восемь вариантов такой записи, например, 1*2+3*4*5-6+7+8-9=100. |
![]() ![]() |
___ALex___ |
![]()
Сообщение
#2
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 282 Репутация: ![]() ![]() ![]() |
to reill
Итак начнём!Много писать не хочется, но посмотрим как уж выйдет в конце. Когда я увидел условие этой задачи я подумал что тут что-то с рекурсией замешано... Но решил эту задачу итерационно. В рекурсии тут не вижу смысла - медленней будет так как каждое промежуточное состояние(значение локальных переменных подпрограммы) как известно сохраняется в стеке(при "погружении в глубь") потом восстанавливается(при "всплытии") Так ближе к делу: сама идея решения естественна - обычный перебор. Вот как это делается: в основной проге - всё примитивно - там идёт перебор всех комбинаций типа "++++++++", "+++++++-", "+++++++*", "+++++++/", "++++++-+", "++++++--" и тд всего 65536 таких вариантов! (из них только 15 будут равны сотне!) (Это же 64K!Размер сегмента в реальном режиме работы проца...чистое совпадение) вот идёт перебор и соответственно нужно иметь подпрограммку вычисляющую значение таких комбинаций, то есть "+-*+-*/*" есть 1+2-3*4+5-6*7/8*9 = -17,5 это делает функция Calc, то есть Calc('+-*+-*/*') = -17,5 (Реализацию Calc не знаю даже как описывать...очень долго получится...возможно ты напишешь свою реализацию такой подпрограммки - главно что общая идея решения уже должна быть ясна) "if Calc(S) = 100 then WriteLn(S);" и если значение комбинации равно сотне - выводим эту комбинацию на консоль Вот в общем и всё! P.S. Спрашивай если захочешь ещё что-нибудь узнать |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 19:27 |