Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача на решение полным перебором! Задача для Haskell 
:(
    Опции темы
Сэт
Дата 10.11.2011, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.11.2011

Репутация: нет
Всего: нет



Вобщем, есть такая задача:
Определить, можно ли расставить знаки «+», «-», «*» и круглые скобки между числами 1, 2,..., 10 (именно в этом порядке, без перестановок) так, чтобы в результате выполнения всех действий получилось заданное число. Функция должна получать на вход число и выдавать строку, изображающую правильную расстановку знаков и скобок, или строку «impossible», если заданное число получить невозможно. Например, для числа 2011 возможный вариант мог бы выглядеть так:
(1+((2*3)+(4+(5*((6*((7*8)+9))+10)))))
Пытался хоть какую-нибудь эвристику для этой программы придумать или найти - не удалось... Приходится думать над полным перебором, а время уже поджимает... Если у кого есть соображения - поделитесь, пожалуйста!!
PM MAIL   Вверх
Фантом
Дата 10.11.2011, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



Не знаю, поможет или нет, но...

Всякое выражение со скобками может быть преобразовано в обратную польскую запись с тем же порядком операндов (но, соответственно, без скобок). При этом первые два элемента записи - это "1" и "2", а дальше каждый элемент может быть одной из трех операций или очередным числом, и количество операций в любой момент должно быть как минимум на единицу меньше количества чисел. Это позволяет написать достаточно простой перебор, правда, после обнаружения ответа его надо будет переводить из ОПЗ в обычное представление, но это не так уж сложно.
PM   Вверх
Сэт
Дата 10.11.2011, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.11.2011

Репутация: нет
Всего: нет



пробую решить через обратную польскую запись, спасибо за совет! Только столкнулся с вопросом, что при составлении списка, который будет участвовать в полном переборе мне не хватает выделенной памяти! Конечно, можно было бы поискать более оптимальное решение, но сейчас, если честно, просто нет на это времени, уже ухватился за этот вариант... не подскажите, как выделить побольше памяти для интерпретатора?? Я в Hugs конечно же работаю...
PM MAIL   Вверх
Сэт
Дата 11.11.2011, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.11.2011

Репутация: нет
Всего: нет



С этим разобрался...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума «Функциональные языки: общие вопросы»
Void
  • Пожалуйста, создавайте темы с содержательными названиями. Если у Вас вопрос по конкретному языку, укажите его в заголовке, например: «[Haskell] Как использовать монаду State».
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Функциональные языки: общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.