|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Все возможные значения
Люди я уже недавно спрашивал-как перебрать все значения? Но у меня дополнение к моему вопросу : как например из строки QWE получить все возможные варианты QWE QEW WQE WEQ EQW EWQ Q W E QW WE EW WQ и т.д. ? Подскажите ПЛЗ очень нужно.
|
#2
|
|||
|
|||
А как выписать набор вручную? Можно построить дерево вариантов, использующее связь типа Q -> QE -> QEW. Сначала выбираем элемент и наращиваем на него не использовавшийся символ, т.е. который не присутствует как в обрастающем элементе, так и на данном этапе обрастания. Т.е, берем Q, выбираем W (Q не подходит по условию). Идем дальше. Снова берем Q, W противоречит условию, остается E.
Нечто подобное: Код:
var i, j, k, l, VarLength, CurVar: integer; Str, Sym: string; Used, Current: string; Output: array of string; Again: boolean; begin Str := Edit1.Text; Current := ''; // комбинация из дерева, обрастающая буквами CurVar := 0; //номер элемента массива всех комбинаций, соответсвующий Current VarLength := 0; //длина Current SetLength(Output, 1); l := 1; while (Length(Str) - VarLength) > 0 do begin Used := Current; //символы, которые есть в обрастающей, использовать нельзя for i := 1 to (Length(Str) - VarLength) do begin k := 1; repeat //выбираем не использовавшийся символ Again := false; j := 1; Sym := Str[k]; while (j <= Length(Used)) and (Again = false) do //проверка begin if Sym = Used[j] then Again := true; j := j + 1; end; k := k + 1; until (Again = false) or (k > Length(Str)); Output[Length(Output)-1] := Current + Sym; Used := Used + Sym; //пополняем строку использованных символов ShowMessage(Output[Length(Output)-1]); SetLength(Output, Length(Output) + 1); end; Current := Output[CurVar]; // если комбинация обрасла по-всякому, ставим новую CurVar := CurVar + 1; VarLength := Length(Current); l := l + 1; end; end; Последний раз редактировалось L2P, 08.02.2008 в 12:13. |
#3
|
|||
|
|||
Пасиба будем пробовать.
|
#4
|
|||
|
|||
Неа не получаеца: Дано:123. так он может 1 2 3 12 13 и т.д. а так нет 1 2 3 11 22 33 12 13 33 и т.д. подскажите как можно и это реализовать ?
|
#5
|
|||
|
|||
Замени used массивом уже найденных вариантов.
|