![]() |
|
|
#1
|
|||
|
|||
|
Люди добрые помогите!
Есть набор слов A,B,C,D,E надо перебрать все возможные комбинации, но не меняя местами, т.е. в начале будет A ... B ... C ... D ... E ... AB ... AC ... AD ...AE ... ABC и так до ABCDE, подскажите как организовать вложенные циклы. |
|
#2
|
||||
|
||||
|
Код:
var
F : TextFile;
A, B, C, D, E : Integer;
begin
AssignFile(F, 'dict.txt');
Rewrite(F);
for E := Ord('a') to Ord('z') do
for D := Ord('a') to Ord('z') do
for C := Ord('a') to Ord('z') do
for B := Ord('a') to Ord('z') do
for A := Ord('a') to Ord('z') do
WriteLn(F, Char(E)+Char(D)+Char(C)+Char(B)+Char(A));
CloseFile(F);
end; |
|
#3
|
|||
|
|||
|
march, не совсем так .... A,B,C,D,E - это слова - пусть будут - Юля, Таня, Табуретка, Космос, Труд ... надо перечислить все комбинации, но не переставляя местами, т.е. комбинации Таня, Юля - не может быть ..... первая комбинация - это Юля, потом Таня и т.д. пока не дойдем до полного набора A,B,C,D,E ...
|
|
#4
|
|||
|
|||
|
брутфорсер =)
|
|
#5
|
|||
|
|||
|
Программер_ХХХороший
Практически да, но очень специфический - так как слова не меняют своих позиций, они либо могут участвовать в общей комбинации, либо отсутствовать и их именно 5 (входных), хотя если есть реализации с 3-4- ... -6 и т.д. не беда, переделаю ) |
|
#6
|
|||
|
|||
|
Понравилась мне эта задачка, решил ее, но давольно таки нестандартным решением, так как стандартное решение показалось очень скучным)
Последний раз редактировалось Asinkrit, 02.04.2011 в 20:20. |
|
#7
|
|||
|
|||
|
Asinkrit,
Отлично, то что надо, но при переборе не задействованы все варинты, а именно нету вариантов BC, BD, BCDE ... CD, CDE .... DE, ведь элемент А - тоже может не учавствовать в исходной комбинации на ровне с другими. |
|
#8
|
||||
|
||||
|
Код:
const
bk = 'ABCDE';
var
I1, I2: Integer;
begin
Memo1.Text:= bk;
for I1:=1 to 5 do
Memo1.Lines.Add(bk[I1]);
for I1:= 1 to 5 do
for I2:= 2 to 5 do
if (I1<>I2) and (I1<I2) then
Memo1.Lines.Add(bk[I1]+bk[I2]);
end; |
|
#9
|
|||
|
|||
|
pesi. после обработки "напильником", получилось:
Код:
const
bk = 'ABCDE';
var
I1, I2, I3, I4: Integer;
begin
Memo1.Text:= bk;
for I1:=1 to 5 do
Memo1.Lines.Add(bk[I1]);
for I1:= 1 to 5 do
for I2:= 2 to 5 do
begin
if (I1<>I2) and (I1<I2) then
Memo1.Lines.Add(bk[I1]+bk[I2]);
for I3:= 3 to 5 do
begin
if (I1<>I2) and (I2<>I3) and (I1<I2) and (I2<I3) then
Memo1.Lines.Add(bk[I1]+bk[I2]+bk[I3]);
for I4 := 4 to 5 do
if (I1<>I2) and (I2<>I3) and (I3<>I4) and (I1<I2) and (I2<I3) and (I3<I4) then
Memo1.Lines.Add(bk[I1]+bk[I2]+bk[I3]+bk[I4])
end;
end;
end;Код:
ABCDE A B C D E AB ABC ABCD ABCE ABD ABDE ABE AC ACD ACDE ACE AD ADE AE BC BCD BCDE BCE BD BDE BE CD CDE CE DE Вроде все правильно, БОЛЬШОЕ Вам СПСИБО!!!!!!!!!! |