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

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

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

Мальчик Вася написал однажды на листе бумаги строчку, состоящую из больших и маленьких латинских букв, а после этого ушел играть в футбол. Когда он вернулся, то обнаружил, что его друг Дима написал под его строкой еще одну строчку такой же длины. Дима утверждает, что свою строчку он получил циклическим сдвигом строки Кирилла направо на несколько шагов(циклический сдвиг строки abcde на 2 позиции направо даст строку deabc). Однако Дима известен тем, что может случайно ошибиться в большом количестве вычислений, поэтому Кирилл в растерянности - верить ли Диме? Помогите ему! По данным строкам выведите минимально возможный размер сдвига или -1, если Дима ошибся. Входные данные Первые две строки входного файла INPUT.TXT содержат строки Кирилла и Димы соответственно. Строки состоят только из латинских символов. Длины строк одинаковы, не превышают 10000 и не равны 0. Выходные данные В выходной файл OUTPUT.TXT выведите единственное число - ответ на поставленную задачу. Пример: INPUT.TXT abcde deabc OUTPUT.TXT 2 Думаю ошибка в частных случаях. На 5 тесте ложится.
Листинг программы
  1. var s, l : string;
  2. i, k : integer;
  3.  
  4. begin
  5. assign(input, 'input.txt');
  6. reset(input);
  7. assign(output, 'output.txt');
  8. rewrite(output);
  9. readln(input, s);
  10. readln(input, l);
  11. k := -1;
  12. for i := 1 to length(s) do
  13. begin
  14. if ( pos(copy(s, 1, i), l) <> 0 ) then
  15. k := pos(copy(s, 1, i), l) - 1;
  16. end;
  17. writeln(output, k);
  18. end.

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

textual
Листинг программы
  1. var
  2.   a, b: array [0..10000] of Char;
  3.   i, j, n: Integer;
  4. begin
  5.   Assign(input,'INPUT.TXT'); Reset(input);
  6.   Assign(output,'OUTPUT.TXT'); Rewrite(output);
  7.   ReadLn(a); ReadLn(b); j:=-1;
  8.   n:=0; while a[n]<>#0 do Inc(n);
  9.   i:=0; while b[i]<>#0 do Inc(i); Inc(b[i]); { барьер }
  10.   if i=n then begin
  11.     j:=0;
  12.     while j<n do begin
  13.       i:=0; while a[i]=b[(i+j) mod n] do Inc(i);
  14.       if i=n then Break; Inc(j);
  15.     end;
  16.     if j=n then j:=-1;
  17.   end;
  18.   WriteLn(j); Close(input); Close(output);
  19. end.

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


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

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

9   голосов , оценка 3.889 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы