procedure typePer(s:string;from:integer=1);
var c:char;
i:integer;
Begin
WriteLN(s);
for i=from+1 to length(s) do
Begin
c=s[from];
s[from]=s;
s=c;
typePer(s,from+1);
c=s[from];
s[from]=s;
s=c;
End;
End;
Нахождение всех возможных перестановок строки
Задание такое: Написать программу, которая по данной строке, находит кол-во строк которые можно получить из неё перестановкой символов и выести все возможные варианты.Т.е дана строка "АБВ",кол-во перестановок - 6 (АБВ,БАВ,БВА,ВАБ,ВБА,АВБ).
Спасибо за помощь ...
Только вот уточнение: перстановкой является строка и может состоять как из цифр, так и из букв или из знаков пунктуации .Например "t65*0f?" . Вывод перестановок по алфавиту необязателен.И програмку надо реализовать на Паскале (.
Ты хочешь, чтоб за тебя написали?
я просто не до конца понял алгоритм и то как её написать именно на Паскале.
Вроде так:
Код:
var a:string;
j:integer;
f:text;
procedure typePer(s:string;from:integer);
var c:char;
i:integer;
Begin
for i:=from+1 to length(s) do
Begin
c:=s[from];
s[from]:=s;
s:=c;
WriteLN(f,s);
typePer(s,from+1);
c:=s[from];
s[from]:=s;
s:=c;
End;
End;
begin
Assign(f,'input.txt'); Reset(f);
ReadLn(f,a);
Close(f);
Assign(f,'output.txt');rewrite(f);
writeln(f,a);
for j:=length(a) downto 1 do
typePer(a,j);
close(f);
end.
j:integer;
f:text;
procedure typePer(s:string;from:integer);
var c:char;
i:integer;
Begin
for i:=from+1 to length(s) do
Begin
c:=s[from];
s[from]:=s;
s:=c;
WriteLN(f,s);
typePer(s,from+1);
c:=s[from];
s[from]:=s;
s:=c;
End;
End;
begin
Assign(f,'input.txt'); Reset(f);
ReadLn(f,a);
Close(f);
Assign(f,'output.txt');rewrite(f);
writeln(f,a);
for j:=length(a) downto 1 do
typePer(a,j);
close(f);
end.
Вот написал по предыдущему сообщению. Работает быстро, но выводит не все варианты(( Где ошибка?