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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2013, 23:23   #1
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию Pascal контрпример - в трех тестах ошибка

Цитата:
Заданные две строки текста одинаковой длины, состоящие из маленьких и больших букв латинского алфавита. Нужно проверить образовано ли вторую строчку путем циклического сдвига первой строки. Если это так, то вывести минимально возможный размер сдвига или -1 в противном случае.* Циклически сдвинуть строку на одну букву справа означает переместить позицию каждой буквы этой строки, кроме последней справа, а значение последней буквы поместить на начало слова. (Если слово «aaabb» сдвинуть на 1 позицию вправо, то получим «baaab»). Аналогичным образом, но в обратную сторону выполняется циклический сдвиг строки слева. (Смещение слова «ebcdaaa» на 2 позиции влево даст «cdaaaeb»).Входные данные: На вход подается два текстовых строки одинаковой длины. Длина строки не превышает 1000 символов.Исходные данные: Необходимо вывести длину минимального сдвига, или число -1, если вторая строка не цикличен смещением первой строки
Примеры
abcde deabc*-> 2
aaab aaab -> 0
aab abc-> -1
У меня не проходит 3 теста, говорит: "Неправильный ответ". Приведите контрпример, когда мое решение неправильно.
Код:
var
  a, b, temp: string;
  ch: char;
  i, right, left, result: integer;

begin
  Readln(a);Readln(b);
  if a = b then 
  begin
    Write(0); halt;
  end;
  temp := a;
  for i := 1 to length(a) do
  begin
    if a = b then begin a := temp; break; end;
    ch := a[1];
    delete(a, 1, 1);
    a := a + ch;
    inc(left);
  end;
  for i := 1 to length(a) do
  begin
    if a = b then begin a := temp; break; end;
    ch := a[length(a)];
    delete(a, length(a), 1);
    a := ch + a;
    inc(right);
  end;
  if left > right then result := right else
    result := left;
  if (left = length(a)) or (right = length(a)) then 
    result := -1;
  Write(result); 
end.
Update:
понял, там строки больше 255 знаков. Кто-то может помочь это реализовать с помощью массивов, а то уже сил нет.
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут

Последний раз редактировалось Izobara; 17.01.2013 в 23:30.
Izobara вне форума Ответить с цитированием
Старый 18.01.2013, 11:22   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Думаю, лучше такое реализовать циклическим списком - больше возможностей и меньше ограничений
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод нечеткой логики в тестах hae85 Компоненты Delphi 6 20.10.2014 11:19
[Pascal] Найти слова, содержащие не менее трех букв из первого и указать после них найденные буквы. suigintou Помощь студентам 1 23.12.2012 17:01
найти наименьшее общее кратное трех чисел (Pascal) spone379 Помощь студентам 4 31.10.2012 18:23
Turbo Pascal - Составить программу нахождения произведения двух наибольших из трех введенных с клавиатуры чисел.(Условный оператор lady.unika Паскаль, Turbo Pascal, PascalABC.NET 3 05.05.2012 21:36