Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2007, 18:10   #1
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию Палиндром

Дано число 1<=N<=14. Затем следуют N строк, состоящие из малых латинских букв. Их от 1 до 30. Найти минимальный палиндром, содержащий все эти строки в качестве подстрок.
Carbon вне форума Ответить с цитированием
Старый 09.11.2007, 19:42   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Возможно, не понял задачу, но предложу решение: объявляем множество типа char, каждую новую строку посимвольно проверяем на содержание во множестве. Да - добавляем, нет - берем следующий символ.
Познавая других, мы познаем себя.
С'est la vie...

Последний раз редактировалось SuperVisor; 09.11.2007 в 19:45.
SuperVisor вне форума Ответить с цитированием
Старый 09.11.2007, 20:22   #3
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

напомню, что палиндром это строка, для которой выполняется :
S[i]=S[Length-i+1],
для i от 1 до Length div 2
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 10.11.2007, 02:48   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

SuperVisor, не это чё-то не туда понесло.
Carbon вне форума Ответить с цитированием
Старый 10.11.2007, 09:02   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

полиндром - это такое слово которое в обратном порядке читается так же как в нормальном
например:
"абба", "12321" , "qwerewq" - это полиндромы
функция которая говорит полиндром ли строка:
Код:
function IsPolindrom(value:string):boolean;
var
  tmpstr:string;
  i:integer;
begin
  tmpstr:='';
  for i:=length(value) downto 1 do
   tmpstr:=tmpstr+value[i];
  Result:=tmpstr = value;
end;
пример

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsPolindrom('арозаупаланалапуазора') then ShowMessage('полиндром')
                                          else ShowMessage('не полиндром');

end;
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2007, 18:04   #6
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
SuperVisor, не это чё-то не туда понесло.
Я потому сразу и оговорился, что мог не понять условие задачи.
В таком случае нужно начинать с наибольшей строки и искать в ней искомые подстроки. После, если в наибольшей строке не найдены все искомые строки путем сложения попытаться вывести остальные. Когда результат достигнут мы получим строку с наименьшим возможным количеством символов. После стоит попытататься найти гепотетическую середину палиндрома и от нее достроить палиндром.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 10.11.2007, 20:03   #7
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

Код:
function IsPolindrom2(value:string):boolean;
var
  i, L, n: integer;
begin
  L:=  length(value);
  n:= L div 2;
  Result := false;
  for i:= 1 to n
    if value[i]<>value[L - i + 1] then exit;

  Result:= true;
end;
Цитата:
Сообщение от Carbon Посмотреть сообщение
Найти минимальный палиндром, содержащий все
эти строки в качестве подстрок.
1. найти минимальную строку, содержашую все заданные
2. проверить не полиндром ли строка.
3. иначе нужно расширять с 2 строн. (слева и справа)
найти сначала наилучший 'центр', чтобы количество добавляемых символов было миниальным
[если наилучего нет, можно весь хвост с одной стороны добавлять]

P.S. надеюсь кто-нить понял мою мысль, особенно Carbon

Virtson, ну ты-то чему молодежь учишь? Есть кнопка "Правка".
Берегите друг друга!

Последний раз редактировалось SuperVisor; 10.11.2007 в 21:03.
Virtson вне форума Ответить с цитированием
Старый 10.11.2007, 20:37   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
надеюсь кто-нить понял мою мысль
Мысль понятна, только у меня сомнения по поводу приведенного алгоритма.
Это потому, что мне показалось, что в задаче имеется в виду палиндром, в который любая исходная строка может входить не более одного раза.
mihali4 вне форума Ответить с цитированием
Старый 10.11.2007, 21:04   #9
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Это потому, что мне показалось, что в задаче имеется в виду палиндром, в который любая исходная строка может входить не более одного раза.
Не обязательно не более 1 раза. Дело в том, что слова могут пересекать центр или находиться в разных половинах. Тогда не получится формировать сначала половину, а затем зеркально её отображать.
Carbon вне форума Ответить с цитированием
Старый 12.11.2007, 14:32   #10
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

SuperVisor:
мой первый пост - ответ на алгоритм rpy3uH и никак не связан со вторым.

затем мне пришла мысль, и я написал алгоритм.
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц