![]() |
|
Модераторы: Poseidon |
![]()
|
|
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
Задача:
Подсчитать колличество слов длины К из данных N букв, не содержащих данное подслово. есть символьные массивы: А и Б. Оба вводятся с клавиатуры в ходе выполнения программы. Строка Б является подстрокой А. Еще есть переменная len, которая определяет длину искомого слова. Например: пользователь вводит строку: "abcd". подстроку: "bc". длину слова: "3". формируем слова: abc -- bc имеет место приутствовать, каунт не увеличиваем. abd -- bc нет, увеличиваем каунт на единицу. bcd -- bc есть, каунт не увеличиваем. Общий алгоритм: 1. Получаем данные. 2. Формируем новые строки. 3. Проверяем содержание подстроки в новых строках и если она есть, то увеличиваем каунт. 4. записываем в файл. Вопрос: как перебрать всевозможные коомбинации при формировании новой строки? (порядок букв менять нельзя, то есть в предыдущем примере подстроки типа dcb нет). заранее спасибо. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
насколько я понял, каждое получаемое слово задается тем, какие буквы мы выкидываем, а какие оставляем (т.к. порядок менять нельзя)
можно воспользоваться рекурсией (дальше, если есть желание, можно заняться оптимизацией):
если сделать класс string с нужными методами, то эта программка может даже скомпилироваться Это сообщение отредактировал(а) maxim1000 - 22.5.2005, 13:31 -------------------- qqq |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
Опять элементарная задачка... ДУМАЙ!!! а не программы пиши... формула получается ВПРЯМУЮ...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| segmentation_fault |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 14.2.2005 Где: в интернете Репутация: нет Всего: 1 |
Ну формула-то впрямую получается, но это уже больше математика чем информатика. Может их препод хочет именно чтобы они алгоритм написали, а не нашли формулу и вставляли туда нужные значения.
|
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
формула надо, так как комбинаторику проходим. учится осталось три дня, а лаба еще не сдана.
дай плиз формулу =) обещаю все потом выучить =) |
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
насчет всех подслов фуормулу нашел:
(m!)/(n!-(m!-n!), где m длина строки, а n длина генерируемых слов. в предыдущем примере m=4, а n=3. Получаем: (4!)/(3!-(4!-3!) = 4!/3! = 4. а вот как вычесть строки содержащие введенную подстроку я не знаю =( |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
А какая разница - слова в строке или подстрока в слове?
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
что-то я не понял вашего вопроса.
разницы никакой, но какое отношение этот пример имеет к данному случаю? хотя нет, разница в том, что слова в строке разделены пробелами. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 17 Всего: 454 |
Только неправильную. С арифметикой сложности... приведи подобные, получится 1, независимо от m и n... уж как ты там подстановку сделал и посчитал не то что на самом деле получается...
Слово - совокупность символов. Пробел - такой же символ, как буква, цифра или там запятая, пока не определен его специальный статус. В твоем задании он НЕ определен. Мысли абстрактнее... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
так ничего и не понял
если делать абстрактно и просто найти кол-во всевозможным подслов заданной длины, то я не понимаю как проверить, какие подслова содержут подстроку, а какие нет. |
|||
|
||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
по совету maxim1000 попробовал воспользоваться рекурсией.
писалось в борлан си++ 3.1, 1992 года, досовская =) проблема -- результат всегда равен нулю.
|
|||
|
||||
| maxim1000 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 24 Всего: 110 |
по-моему, здесь получилось не совсем то, что я предполагал:
в алгоритме в функцию передается строка с добавлением одного символа а в реализации передается строка из одного символа тут надо было бы выделить память (new или массивом) под новую строку, записать туда старую и добавить еще один символ можно вообще использовать один буфер для всех вызовов: просто сделать его достаточно большим (k+1 должно хватить), и перед вторым рекурсивным вызовом добавлять туда символ, а после - удалять (т.к. этот буфер используется и предыдущими вызовами)
P.S. кстати, когда с помощью scanf читается число, надо давать адрес переменной для созранения результата - перед len надо ставить &... -------------------- qqq |
||||||
|
|||||||
| .talisman |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 19.2.2005 Репутация: нет Всего: нет |
огромное спасибо.
насчет амперсанда знал, опечатался =) |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |