|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.11.2011, 23:07 | #1 |
Пользователь
Регистрация: 19.09.2011
Сообщений: 23
|
Анаграмма
Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.
Во входном файле два слова в отдельных строках. Длина каждого слова не превышает 255 символов. В выходной файл выведите "YES" - если введенные слова являются анаграммами друг друга, и "NO" - в противном случае. Пример: SHARM YES MARSH ANANAS NO NASA |
15.11.2011, 01:05 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
на форуме уже решалась такая задачка.
а алгоритм решения, как ни странно, прост, как топор: проходим по всем буквам первого слова, находя для них точно такие же во втором слове. Если для какой-то буквы первого слова аналогичной не найдено - прерывание цикла, выход с "NO", если нашлась буква - то из второго слова её нужно удалить. если дошли до конца 1-го слова без сбоев, тогда проверяем остаток во 2-м слове - если он пуст - ответ "YES", если во втором слове остались буквы - ответ "NO" p.s. я тут алгоритм расписывал больше, чем писать полностью исходный код решения! Последний раз редактировалось Serge_Bliznykov; 15.11.2011 в 08:40. Причина: подправил алгоритм, забыл указать про удаление буквы из второго слова. Спасибо за замечание TinMan. |
15.11.2011, 02:21 | #3 | |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Цитата:
Но я бы поступил проще: отсортировал бы оба слова и сравнил. Если равны - значит, анаграмма..
Предпочитаю на "ты".
|
|
15.11.2011, 07:26 | #4 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
При этом, кстати, сразу (перед сортировкой) можно сравнить длину слов. Если она разная, значит NO. В противном случае работаем дальше.
|
15.11.2011, 08:47 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Вадим Мошев, да, согласен. это несложно и сразу отсеет заведомо неверные варианты!
TinMan, ну, можно и так, просто мне показалось, что вариант без сортировки проще (ведь в Паскаль/Delphi нет встроенных методов сортировки), да и эффективнее. Чем сортировать 255 символов, программа может уже завершить работу на первых же проверках... ладно. раз пошла такая пьянка, то вот код решения: Код:
|
15.11.2011, 10:06 | #6 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Я совершенно согласен со всеми доводами . Конечно, двойная сортировка не очень эффективна, она годится скорее для PHP etc. Да и простота тут весьма условна, только при наличии библиотечных процедур для сортировки..
Интересно, что если наложить условие, что слова непусты (или считать, что пустота пустоте не анаграмма, что не лишено сермяжного смысла)), то можно избавиться от двойного вывода 'NO' в приведенном коде.
Предпочитаю на "ты".
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
анаграмма | Витас | Помощь студентам | 1 | 02.11.2010 18:50 |
[С++] Анаграмма | Nikita_M | Помощь студентам | 1 | 25.10.2010 21:46 |
Анаграмма | Djeka(c) | Помощь студентам | 1 | 16.09.2010 22:15 |