Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите разобрать решение задачи на нахождение периода строки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ONi++
Задача:
Ввести строку. Найти её период.

Идея решения:
Необходимо найти K (количество символов в строке), определить делители K и сравнить вырезки из строки по R символов (R - делитель K).

Программа на Паскале:

program period_stroki;
var
s:string;
h,i,j,k,n,p,x:integer;
begin
readln(s);
n:=length(s);
for i:=1 to n do
begin
k:=0;
if n mod i = 0 then
begin
h:=n div i;
x:=1;
for j:=1 to i-1 do {нужен ли здесь -1? программа выполняется правильно и без неё.}
begin
if copy(s,1,h)=copy(s,x+h,h)then k:=k+1;
x:=x+h;
end;
if k=i-1 then p:=h;
end;
end;
write(copy(s,1,p));
end.
{Задача из "Олимпиадные задания с решениями" Лариной Э.С.
Не могу понять ее решения. Пробовал решать на примере - получается какой-то бред. Но ведь решение правильное и период находится.}

Гость
Цитата(ONi++ @ 26.08.2009 21:02) *

Задача:
Ввести строку. Найти её период.

Идея решения:
Необходимо найти K (количество символов в строке), определить делители K и сравнить вырезки из строки по R символов (R - делитель K).

Программа на Паскале:

program period_stroki;
var
s:string;
h,i,j,k,n,p,x:integer;
begin
readln(s);
n:=length(s);
for i:=1 to n do
begin
k:=0;
if n mod i = 0 then
begin
h:=n div i;
x:=1;
for j:=1 to i-1 do {нужен ли здесь -1? программа выполняется правильно и без неё.}
begin
if copy(s,1,h)=copy(s,x+h,h)then k:=k+1;
x:=x+h;
end;
if k=i-1 then p:=h;
end;
end;
write(copy(s,1,p));
end.
{Задача из "Олимпиадные задания с решениями" Лариной Э.С.
Не могу понять ее решения. Пробовал решать на примере - получается какой-то бред. Но ведь решение правильное и период находится.}



тоже никак не могу разобраться
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.