|
#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 Вроде все правильно, БОЛЬШОЕ Вам СПСИБО!!!!!!!!!! |