Показать сообщение отдельно
Старый 05.04.2015, 17:30   #1 (permalink)
Aksinia
Member
 
Регистрация: 15.12.2013
Сообщений: 31
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 114
Question Помогите "сломать" программу

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

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

Входные данные
Задана последовательность слов, по одному слову в строке. Длина одного слова не превышает 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
Aksinia вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070