|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Boris Sivko 2:452/26.14 05 Mar 2003 06:08:38 To : Aleksey Zelenin Subject : Ладно. --------------------------------------------------------------------------------
Дело "Ладно." было в Вторник Март 04 2003 02:30 и заведено оно от Aleksey
Zelenin к All, но мне кажется, что в нём не хватало нескольких строк:
AZ> Есть массив, в котоpом лежат числа. Размеp массива(кол-во чисел)
AZ> известно. Hадо пеpебpать все возможные ваpианты сочетаний чисел,
AZ> напpимеp: массив: 1; 2; 3. Hадо: 1; 2; 3; 1,2; 1,3; 2,3; 1,2,3; т.е.
AZ> количество ячеек массива, с котоpыми надо pаботать, будет pазное. Я
AZ> подозpеваю, что может быть как-нибудь чеpез pекуpсию, но не
AZ> пpедставляю как. Помогите, пожалуйста. Совсем голову сломал.
Если числа в массиве разные, то получаем обычный перебор всех двоичных
комбинаций:
123
000 ''
001 '3'
010 '2'
011 '23'
100 '1'
101 '13'
110 '12'
111 '123'
Если есть одинаковые, то ответ зависит от условий задачи.
Можно и через рекурсию. Hапример так:
procedure output(s:string);
var i:longint;
begin
for i:=1 to length(s) do if s[i]='1' then write(a[i],' ');
writeln;
end;
procedure rec(s:string);
begin
if length(s)+1=n_elem then
begin
output(s+'0');
output(s+'1');
end else
begin
rec(s+'1');
rec(s+'0');
end;
end;
begin
// вводим a[1..n_elem]
rec('');
end.
Пример наглядный и его не следует воспринимать буквально. В смысле как
руководство к непостредственной реализации.
Счастливо, Aleksey. Вспоминай обо мне...
... I'll be back...
* Origin: Оставайтесь с нами. (2:452/26.14)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/207123e658842.html, оценка из 5, голосов 10
|