![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Tauka |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 28 Репутация: ![]() ![]() ![]() |
Есть два предложения из простых смволов латынского алфавита.
Цель: надо найти найбольшую общую последовательность. Например: 1. aacdgtserf 2. ascfde Наибольшая общая последовательность тут будет "acde" -------------------- С уважением,
Таука. |
klem4 |
![]()
Сообщение
#2
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
вот что-то типа, щас накатал, не оч рационально, но думаю идея правильная :
uses crt;
var s1,s2,s:string;
i,j,k,startj:integer;
flag:boolean;
Begin
clrscr;
readln(s1);
readln(s2);
k:=0;
i:=1;
startj:=1;
j:=startj;
while i<=length(s1) do
begin
j:=startj;
flag:=true;
while (j<=length(s2))and(flag) do
if s1[i]=s2[j] then
begin
flag:=false;
startj:=j+1;
inc(k);
s[k]:=s1[i];
inc(i);
end
else inc(j);
if flag then
inc(i);
end;
for i:=1 to k do
write(s[i]);
readln;
end.
Сообщение отредактировано: klem4 - 28.04.2005 9:59 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(klem4 @ 28.04.05 9:58) не оч рационально :yes: А если вместо
k := 0;
...
inc(k);
s[k]:=s1[i];
...
for i:=1 to k do
write(s[i]);
сделать вот так:
s := '';
...
s := s + s1[i];
...
writeln(s)
Логика программы не меняется, но по-моему это проще ... |
Guest |
![]()
Сообщение
#4
|
Гость ![]() |
1) axjx
2) satjx выводит ax а должно ajx |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Между прочим, тестовые примеры принято давать вместе с заданием... Тем более в таких "бредовых" заданиях...
|
virt |
![]() ![]()
Сообщение
#6
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
поищи алгоритм нудельмана - вунша.
добавил позже, Прикрепленные файлы ![]() -------------------- |
klem4 |
![]()
Сообщение
#7
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
тебе осталось только подкорректировать, чтобы выводила большую из 2-х
теперь вроде привильно :low:
uses crt;
var s1,s2,s,sss:string;
i,j,k,startj,count:integer;
flag:boolean;
Begin
clrscr;
readln(s1);
readln(s2);
i:=1; count:=0;
startj:=1; j:=startj;
s:='';
repeat
while i<=length(s1) do
begin
j:=startj;
flag:=true;
while (j<=length(s2))and(flag) do
if s1[i]=s2[j] then
begin
flag:=false;
startj:=j+1;
s:=s+s1[i];
inc(i);
end
else inc(j);
if flag then
inc(i);
end;
writeln;
sss:=s1;
s1:=s2;
s2:=sss;
inc(count);
writeln(count,'>',s);
startj:=1;
j:=startj;
s:='';
i:=1;
until count=2;
readln;
end.
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 12:33 |