Сдвиг текста - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Мальчик Вася написал однажды на листе бумаги строчку, состоящую из больших и маленьких латинских букв, а после этого ушел играть в футбол. Когда он вернулся, то обнаружил, что его друг Дима написал под его строкой еще одну строчку такой же длины. Дима утверждает, что свою строчку он получил циклическим сдвигом строки Кирилла направо на несколько шагов(циклический сдвиг строки abcde на 2 позиции направо даст строку deabc). Однако Дима известен тем, что может случайно ошибиться в большом количестве вычислений, поэтому Кирилл в растерянности - верить ли Диме? Помогите ему! По данным строкам выведите минимально возможный размер сдвига или -1, если Дима ошибся. Входные данные Первые две строки входного файла INPUT.TXT содержат строки Кирилла и Димы соответственно. Строки состоят только из латинских символов. Длины строк одинаковы, не превышают 10000 и не равны 0. Выходные данные В выходной файл OUTPUT.TXT выведите единственное число - ответ на поставленную задачу. Пример: INPUT.TXT abcde deabc OUTPUT.TXT 2 Думаю ошибка в частных случаях. На 5 тесте ложится.

Решение задачи: «Сдвиг текста»

textual
Листинг программы
var
  a, b: array [0..10000] of Char;
  i, j, n: Integer;
begin
  Assign(input,'INPUT.TXT'); Reset(input); 
  Assign(output,'OUTPUT.TXT'); Rewrite(output);
  ReadLn(a); ReadLn(b); j:=-1;
  n:=0; while a[n]<>#0 do Inc(n);
  i:=0; while b[i]<>#0 do Inc(i); Inc(b[i]); { барьер }
  if i=n then begin
    j:=0;
    while j<n do begin
      i:=0; while a[i]=b[(i+j) mod n] do Inc(i);
      if i=n then Break; Inc(j);
    end;
    if j=n then j:=-1;
  end;
  WriteLn(j); Close(input); Close(output);
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы