Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите "сломать" программу (http://www.tehnari.ru/f41/t101890/)

Aksinia 05.04.2015 17:30

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

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

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

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

PHP код:

program project1;
type mess=array [1..50of 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)=3then
          
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


Vladimir_S 05.04.2015 18:45

Аксинья, прикрепите, пожалуйста, входной файл. А лучше, если и выходной, получившийся в результате выполнения конкретного задания (пример). А то без этого как-то сложновато.

Aksinia 05.04.2015 19:24

Вложений: 1
Входной файл, например, такой. А выводится ответ на консоль.

Aksinia 05.04.2015 19:27

Вложений: 1
Вот то, что выводится.

Vladimir_S 05.04.2015 21:11

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

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

Извините.

Aksinia 07.04.2015 21:44

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

Aksinia 07.04.2015 23:16

Вложений: 1
Сама прога немного изменилась.
Все в архиве.

Aksinia 08.04.2015 17:06

Стало понятней?:tehnari_ru_091:


Часовой пояс GMT +4, время: 19:49.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.