Programación General > C/C++

 Combinacion de un arreglo

(1/1)

Minamimoto:
He pasado toda la tarde intentado hacer un algoritmo que dado un arreglo cualquiera, por ejemplo

[0 1 1 1 0]  calcule todos los arreglos que se pueden hacer con la combinacion del numero 1 asi:

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

El numero total de arreglos tendría que ser 2^n, en donde n es e numero total de unos en el arreglo original (3)

Existe un algoritmo que haga esto?

Editado para exponer mejor el problema

Epa:
buenas

fijate en eso, no se que tan eficiente sera, pero anda..
seguro si buscas por ahi encontras algo mejor


--- Código: C++ ---    int mat[5] = {0,1,1,1,0};      for(int a = 0; a <= mat[0]; a++)      for(int b = 0; b <= mat[1]; b++)         for(int c = 0; c <= mat[2]; c++)            for(int d = 0; d <= mat[3]; d++)               for(int e = 0; e <= mat[4]; e++)               {                  if(a && mat[a])                     cout << 1;                  else                     cout << 0;                  if(b && mat[b])                     cout << 1;                  else                     cout << 0;                     if(c && mat[c])                     cout << 1;                  else                     cout << 0;                  if(d && mat[d])                     cout << 1;                  else                     cout << 0;                  if(e && mat[e])                     cout << 1;                  else                     cout << 0;                  cout << endl;               };    

Minamimoto:
Gracias por tu respuesta, pero quiza no me explique bien, el algortimo tendria que trabajar para cualquier arreglo, si importar la longitud, estaba investigando y se supone que es un algortimos de variacion, pero no he podido solucionar el problema

Navegación

[0] Índice de Mensajes

Ir a la versión completa