![]() |
|
|
|
|
#1
|
|||
|
|||
|
Доброго дня!
Кто подскажет как реализовать на Delphi 6.0 (другого компилятора нет) следующее: Есть 6 цыфр a b c d e f Каждая из них от 1 до 90 Нужно перебрать все комбинации и записать в файл(.txt или какой лучше), при условии что 123456 612345 561234 163245 421635 и т.д. одна и таже комбинация. Зарание спасибо. |
|
#2
|
|||
|
|||
|
Возможно, поможет вот это - программа, которая перебирает все комбинации букв/цифр в строке.
Т.е. если строка 123, то результат будет: 123 132 213 231 312 321 Код:
program Reshuffle;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
StrLen : Integer;
//------------------------------------------------------------------------------
// Обменять местами символы в строке
//------------------------------------------------------------------------------
procedure Swap(var S: String; l, k: Integer);
var
C: Char;
begin
C := S[l];
S[l] := S[k];
S[k] := C;
end;
//------------------------------------------------------------------------------
// Сортировка строки
//------------------------------------------------------------------------------
function SortString(const S: String): String;
var
i, j : Integer;
NoSwap : Boolean;
begin
Result := S;
for i := 1 to StrLen - 1 do begin
NoSwap := True;
for j := StrLen downto i do
if Result[j] <=Result[i] then begin
Swap(Result, i, j);
NoSwap := False;
end;
if NoSwap then Exit;
end;
end;
//------------------------------------------------------------------------------
// Получить следующую комбинацию символов
//------------------------------------------------------------------------------
function GetNext(var S: String): Boolean;
var
i, j: Integer;
begin
i := pred(StrLen);
while (i > 0) and (S[i] > S[i + 1]) do
dec(i);
if i > 0 then begin
j := i + 1;
{поиск j}
while (j < StrLen) and (S[j + 1] > S[i]) do
inc(j);
Swap(S, i, j);
for j := i + 1 to (StrLen + i) div 2 do
Swap(S, j, StrLen - j + i + 1);
Result := True
end else
Result := False;
end;
var
Str : String;
Stop : Boolean;
iCount : Integer;
F : Text;
begin
Write('String: ');
Readln(Str);
StrLen := Length(Str);
Str := SortString(Str);
iCount := 0; // Это просто счетчик комбинаций для красоты
// Имя файла для вывода результатов будет таким же,
// как у исполняемого, расширение '.txt'
AssignFile(F, ChangeFileExt(ParamStr(0), '.txt'));
Rewrite(F);
repeat
iCount := iCount + 1;
Writeln(iCount:10, '. ', Str);
Writeln(F, iCount:10, '. ', Str);
Stop := GetNext(Str);
until not Stop;
CloseFile(F);
Writeln;
Writeln('Press Enter...');
Readln;
end. |