• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите "сломать" программу

  • Автор темы Автор темы Aksinia
  • Дата начала Дата начала

Aksinia

Новые
Регистрация
15 Дек 2013
Сообщения
31
Реакции
1
Баллы
0
Помогите "сломать" программу

Здравствуйте!
Когда я отправляю свою програмку на проверку, она проходит не все тесты. А я вот, такие тесты, на которых она не работает, подобрать не могу. Поэтому, может быть, кто-то поможет мне найти такие примеры?):tehnari_ru_942:

Вот такая задача:
Для данного слова (последовательности строчных латинских букв) выведите следующее за ним (в лексикографическом порядке) слово, которое может быть получено из данного перестановкой букв (анаграмму). Если данное слово уже является последним среди всех своих анаграмм, то необходимо вывести первую возможную (в лексикографическом порядке) анаграмму.

Входные данные
Задана последовательность слов, по одному слову в строке. Длина одного слова не превышает 50 символов.

Выходные данные
Необходимо вывести результат для каждого полученного на вход слова.

PHP:
program project1;
type mess=array [1..50] of string;
var
  M:mess;
  pr,i,min,v,count,maincount:integer;
  SaveStr,Str:string;
  b:char;
  f:textfile;
begin
  count:=0;
  Assign(f, 'input.txt');
  reset(f);
  while not eof(f) do begin
    Str:='';
    readln(f,Str);
    M[count]:=Str;
    inc(count);
  end;
  close(f);
  mainCount:=count;
  count:=0;
  repeat
    Str:=M[count];
    SaveStr:=Str;
    if ((length(str)=1) or (length(str)=0)) then else begin
      pr:=Length(Str)-1;
      i:=Length(Str);
      while ((Str[pr]{!!!!}>=Str[i]) and (pr>1)) do begin// 7
        pr:=pr-1;
        i:=i-1;
      end;//7 находится перв.
      min:=i;//6
      for v:=i to Length(Str) do if ((Str[v]>Str[pr]) and (Str[v]<Str[min])) then min:=v;
      if  (Str[pr]<Str[min]) then begin
        b:=Str[min];
        Str[min]:=Str[pr];
        Str[pr]:=b;//6 перв. меняется с миним. послед.
        v:=(Length(Str));
        if ((i<>Length(Str))and(Str[pr+1]>Str[v])) then begin
          if (Length(Str)=3) then
          for v:=(Length(Str)) downto (((Length(Str)-PR)div 2)+pr+1) do begin//5
            b:=Str[v];
            Str[v]:=Str[pr+Length(Str)-v+1{!!!!}];
            Str[pr+Length(Str)-v+1{!!!!}]:=b;
          end//5 меняется порядок остальных
          else
          for v:=(Length(Str)) downto (((Length(Str)-PR)div 2)+pr+1{!!!!}) do begin//5
            b:=Str[v];
            Str[v]:=Str[pr+Length(Str)-v+1{!!!!}];
            Str[pr+Length(Str)-v+1{!!!!}]:=b;
          end;//5 меняется порядок остальных
        end;
      end;
      if SaveStr=Str then begin
        for v:=1 to (Length(Str)div 2) do begin//5
          b:=Str[v];
          Str[v]:=Str[Length(Str)-v+1];
          Str[Length(Str)-v+1]:=b;
        end//5 меняется порядок остальных
      end;
    end;
    writeln(str);
    inc(count);
  until count=maincount;
  readln;
end.
 
Аксинья, прикрепите, пожалуйста, входной файл. А лучше, если и выходной, получившийся в результате выполнения конкретного задания (пример). А то без этого как-то сложновато.
 
Входной файл, например, такой. А выводится ответ на консоль.
 

Вложения

  • input.txt
    input.txt
    141 байт · Просмотры: 589
Вот то, что выводится.
 

Вложения

  • Безымянный.png.webp
    Безымянный.png.webp
    8.5 KB · Просмотры: 246
Ох, боюсь - не смогу помочь. Ибо ни-че-го не понимаю! Ни в задании, ни в структуре входного файла, ни в программе (какая-то жуть накручена).
Я бы понял если бы, например, было так:
1. Входной файл содержит кучу слов разной длины вперемешку.
2. Вводим с консоли слово.
3. Выискиваем в файле все анаграммы введенного (например, через символьное множество с предварительной отсортировкой по длине) и располагаем их в лексикографическом порядке, начиная с введенного. Если введенное является последним, то выводим самую первую (младшую) анаграмму.

У Вас же что-то совсем не то. Вроде слова уже исходно упорядочены, все длины (почему-то кроме одно- и двухбуквенных) разделены пустыми строками, ввода слова в программе не вижу, логику получения выходных данных не понимаю.

Извините.
 
Попробую объяснить понятней. Во входном файле например слово aab.
Тогда программа выводит на консоль слово aba(оно следующее за aab, если все анаграммы слова aab расположить в лексикографическом порядке).
Или во входном файле 4 слова(по одному в строке) :
aab
aba
baa
aaa
Тогда на консоль должно вывестись:
aba
baa
aab
aaa
 
Сама прога немного изменилась.
Все в архиве.
 

Вложения

  • 2.rar
    2.rar
    27.5 KB · Просмотры: 23
Стало понятней?:tehnari_ru_091:
 
Назад
Сверху