|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 4
|
|
"Словесная игра"13.04.2010, 16:29. Показов 1689. Ответов 11
Метки нет (Все метки)
Собственно суть задачи :
В нашем варианте игры каждая буква имеет цену, и вы должны составить из букв одно и более слов, дающих максимальную суммарную стоимость. Даны цены букв , список русских слов и набор букв. Найдите в словаре или пары слов с наибольшей суммарной стоимостью , которые можно составить из заданного набора букв. Цены букв во вложении. Входные данные: С клавиатуры вводим одну строку с маленькими русскими буквами(допустимые буквы- от "а" до "я").Строка содержит от трех до семи букв вкючительно , в произвольном порядке. Файл словарь "words.txt" содержит не более 30 000(100 слов за глаза хватит). В конце этого файла находится строка с единственным символом "."(точка). Каждая из остальных строк содержит слово длиной от трех до семи маленьких латинских букв,включительно . Слова в файле упоряжочены по алфавиту. Выходные данные: В первую строку выходного файла output.txt ваша программа должна написать наибольшую возможную суммарную стоимость , а в следующих строках - перечислить все допустимые слова и, или пары слов из словаря words.txt с такой стоимостью. Каждое слово или пару выводите на отдельную строку. P.S Наверное перестановки это главное в этой программе . Думаю там рекурсия.(Лаба так называется)
0
|
|
| 13.04.2010, 16:29 | |
|
Ответы с готовыми решениями:
11
Игра слов, игра Scrabble Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново? |
|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 4
|
||||||
| 15.04.2010, 19:47 [ТС] | ||||||
|
Вот то что получилось у меня, проблема в том что функция перестановок у меня не правильная.
Нужно генерировать перестановки не только из того количества букв которые дали ,но и с меньшим кол-вом. Поясню пользователь ввел буквы а б в г д программа будет генерировать перестановки со всеми буквами сразу. а нужно чтобы генерерировало с а б в г д а б в г а б в в г д и так далее... как это реализовать не могу понять .
0
|
||||||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||
| 18.04.2010, 19:37 | ||
|
По-моему так намного проще.
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 18.04.2010, 21:08 | |
|
Пара вопросов:
1. Мы вводим от 3 до 7 букв, но обязательно ли слово из словаря тоже должно быть длиной от 3 до 7 букв соответственно? Т.е. могут ли введённые буквы в результирующем слове (паре слов) повторяться? 2. Все слова в словаре идут поодиночке? Отдельных пар в словаре нету, т.е. нашу пару мы можем составить только из пары записей в словаре?
0
|
|
|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 4
|
||||
| 19.04.2010, 03:36 [ТС] | ||||
|
0
|
||||
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
|||||||
| 19.04.2010, 05:54 | |||||||
0
|
|||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 19.04.2010, 11:59 | |
|
Я бы дела так. Ищем все комбинации введённых букв (не обязательно всего набора) (можно буквы пронумеровать индексами от 1 до 3 (4, 5, 6, 7, в зависимости от ввода) и искать комбинации цифр 123, либо 1234, 12345, 123456, 1234567, а потом для каждого найденного набора вместо цифры подставлять нужную букву), далее для каждого найденного набора букв искать все слова в словаре, совпадающие с найденным наборами. Заносить эти слова в, например, массив строк. Далее мы просто считаем вЕсы всех найденных слов или их пар (пару составляем так: берём первое слово, далее подставляем к нему второе, третье, ... , n-е, затем берём второе слово, к нему подставляем третье, ..., n-е и т.д, но это и так понятно))) ), находим максимальный, а затем снова просматриваем массив строк, составляя слова (или пары) с найденным весом. Выводим переменную max (максимальный вес) и отредактированный массив строк, содержащий только слова (или пары) с таким весом.
Скорее всего рекурсия будет в функции, ищущей наборы букв. Добавлено через 50 минут Так, вся фишка сейчас в том, чтобы написать функцию, ищущую все эти возможные перестановки... Думаю, нужно написать сначала код, ищущий перестановку N чисел, и затем для каждой найденной перестановки рекурсивно применять его для N-1 чисел... Добавлено через 32 минуты Так, чтобы перебрать все возможные варианты для N цифр, мы просто берём последнюю цифру числа и "тянем" её через всё число, пока она не займёт первую позицию. Затем в получившемся числе берём последнюю цифру и опять "тянем" её вдоль числа до первой позиции и т.д. Продолжаем, пока последнее число не совпадёт с исходным. Пример для числа 123 (для нашей задачи: например, пользователь ввёл "адф". Нумеруем а = 1, д = 2, ф = 3, ищем комбинацию для 123, подставляем вместо цифр соответствующие буквы и ищем получившееся слово в словаре) Пример: пользователь ввёл отк. Нумеруем: о = 1, т = 2, к = 3. Ищем комбинации 123 132 312 321 231 213 123 (совпало с начальным -> отбрасываем последний результат). Получили ряд 123 132 312 321 231 213 он соответствует словам отк окт кот кто тко ток Скорее всего найденные в словаре слова будут: кот, кто, ток Осталось подумать, пренебречь ли ресурсами и тупо ко всем найденным перестановкам рекурсивно применять алогритм для меньшего числа цифр (тогда будут повторяться некоторые наборы, соответственно будет происходить повторная процедура поиска), или же пренебречь памятью и хранить все найденные перестановки в массиве строк, исключая повторения, а уже после нахождения ВСЕХ возможных перестановок включать процедуру поиска... Добавлено через 18 секунд И я склоняюсь ко второму варианту.
0
|
|
|
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
|
||
| 19.04.2010, 19:19 | ||
|
silent_1991, попробуйте так: начальное число - 1234. Комбинацию 1432 Вы таким способом не получите...
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 20.04.2010, 16:28 | |
|
valeriikozlov,
Хи, и правда... А я вроде всё проверил, обрадовался))) Есть какой-то другой способ? Алгоритмический? Добавлено через 19 минут А если так: делаем инкремент для чисел с 1 по N, а затем удаляем из полученного набора все вхождения чисел, в которых на каком-либо разряде стоит цифра больше N (или же 0)? Единственная загвоздка: для 7 введённых букв придётся хранить 7654321 чисел... Добавлено через 4 минуты Тогда можно делать, как я предлагал раньше, ищем следующую комбинацию, проверяем её на правильность (ищем разряды, большие N или нулевые), и сразу выполняем процедуру поиска. Ну или можно искать комбинацию, проверять её на правильность, а уже потом записывать в наш список комбинаций... Правда так всё равно будет куча операций прибавления единицы, но зато просто и зходу найдутся все возможные варианты перестановок не только с данным количеством разрядов, но и с меньшим... И никакой рекурсии))) Добавлено через 14 минут Вот, вроде придумал алгоритм... Берём выборку для одной цифры. Скажем мы ввели три буквы. получили число 123. Возьмём выборку: 1 2 3 Далее для каждой найденной выборки добавляем один младший разряд и в него записываем каждую недостающую цифру. Взяли 1. Недостающие цифры - 2 и 3. получили 12 13 Так же поступаем с остальными. Недостающий цифры для 2 - 1 и 3, для 3 - 1 и 2. Распишем: 21 23 31 32 Далее в каждой найденной выборке предыдущего шага (т.е. из двух, в данном случае, цифр) добавляем ещё разряд и в него записываем недостающие цифры для каждой пары (например для 23 недостающая цифра - 1, для 31 - 2 и т.д.). Получаем: 123 132 213 231 312 321 Всё, перебрали все варианты - выходим (как критерий можно использовать то, что изначальное расположение цифр 123, а конечно всегда будет перевёрнутым - 321. Только что ради эксперимента расписал для четырёх цифр - получилось 64 комбинации). Думаю, это надо рекурсивно реализовать... Добавлено через 42 минуты Кстати, для 7 цифр число размещений будет равно 13699... Нехило, а?))) Добавлено через 16 часов 32 минуты Так, научился считать все перестановки N цифр... Теперь надо придумать, как считать перестановки для N-1 цифр... Есть идея у всех перестановок предыдущего ((K-1)-го) шага отсекать последний разряд и для каждого получившегося набора рекурсивно запускать функцию перестановки. Для каждой найденной перестановки проверять, нет ли уже такой перестановки в нашем массиве перестановок, если нет - записывать туда найденный набор, если есть - искать следующую перестановку... Правда поиск уже для 5 разрядов визуально заметен, а для 7 занимает (на глаз) 2,5 - 3 секунды...
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||
| 23.04.2010, 21:44 | ||||||
|
Жаль, что тема сдохла... А у меня появился код формирования всех сочетаний без повторенийдля чисел от 1 до N...
0
|
||||||
|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 4
|
|
| 24.04.2010, 04:48 [ТС] | |
|
а нужны буквы.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 24.04.2010, 06:11 | |
|
И? Нумеруем буквы...
abc 123 Делаем все перестановки 1 2 3 12 13 23 21 31 32 123 132 213 231 312 321 Получаем a b c ab ac bc ba ca cb abc acb bac bca cab cba И теперь с этим набором работаем.
0
|
|
| 24.04.2010, 06:11 | |
|
Помогаю со студенческими работами здесь
12
Предикаты. Словесная формулировка
Словесная запись числового выражения. Нужна словесная запись этой задачи Словесная форма представления логических элементов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|