|
#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. |