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
Ir a la versión completa