Wszystkie możliwe kombinacje

0

Witam, od 3 dni próbuje i coś mi nie wychodzi, może ktoś pomoże.

Potrzebny program (składania) który z macierzy wyświetli wszystkie możliwe kombinacje. Np:

macierz:

a = [0 1 2 0]

aby wypisał wszystkie możliwe kombinacje tak:

[0 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 2 0]
[0 1 1 0]
[0 1 2 0]

Aha, nie musi być po kolei, ważne aby wypluwało wszystkie kombinacje..
Potrzebne mi to do magisterki, bo niestety Solver Excela wymięka przy obliczeniach jakie robie.. Kolejne utrudnienie, to takie, że macierz nie ma stałej wielkości równie dobrze może być a= [1 2 3 4 22 34 43 54 65]
Z góry dzięki..

Osobiście wyprodukowałem coś takiego (nie działa):
Kod:

    maxUdzialy = [1 0 2]; 
    udzialIlosc = [0 0 0];
    wiersz = 1;
    koniec = 0;
    while koniec ==0 do
        if udzialIlosc(1,wiersz) < maxUdzialy(1,wiersz) then // jeżeli jest mniejszy
            xx = udzialIlosc(1,wiersz); 
            udzialIlosc(1,wiersz) = xx + 1; // zwiększ pierwszy
        else // jest równy
            // udzialIlosc(1,wiersz) = 0; // lub min
            xx = udzialIlosc(1,wiersz+1); // zwiększ kolejne
            udzialIlosc(1,wiersz+1) = xx + 1;
            xx = wiersz;
            wiersz = xx + 1; // zwiesz wiersz
        end
    end
        //if wiersz > size(1,'c'), wiersz = 1; end; //size = length
        udzialIlosc
        if udzialIlosc == maxUdzialy then, koniec =1; end
    end

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Dodaj znalezisko!Zglos posta!Dodaj posta do linkr!
Edytuj/Usuń Wiadomość

0

ja mam jedno pytanko czy to co wypluwac ma to coś i Ty to napisałes jest dobrze bo "1" sobbie skacze a "2" nie a jeśli chodzi o wszystkie kabinacje zbioru np 4 elementowego to:
[0,1,2,0] // tab.
0000 //binarne 0 i nie wyświewtla zadnego elm.[]
0001 // bin 1 i wyświetla ostatni element [0]
0010 // bin 2 i wyświwetla 3 elm [2]
0011 // wyswietla 3 i 4 elm [2,0]

0
program PZZA;
{$APPTYPE CONSOLE}
uses
  SysUtils;
//pod zbiory zbioru a 
type my=array of integer;
var
  tab,t:my;
  n,m,i,j:longint;
begin
  n:=30;
  setlength(tab,n);
 { tab[1]:='a';
  tab[2]:='b';
  tab[3]:='c';
  tab[4]:='d';
  tab[5]:='e';
  }
 for i:=1 to n do tab[i]:=i;
  for i:=1 to 1 shl n do
  begin
  m:=i;
  write('{');
  for j:=0 to n do
  begin
    if odd(m) then write(tab[n-j],',') ;
    m:=m shr 1;
  end;
     writeln('}');
  end;
  write(1 shl 30);
  readln;
end.

sorka za denne formatowanie ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1