Ejm: Si V: 8, 2, 3, 3, 6, 4. y X=13
Soluciones:
3+6+4 = 13
8+2+3=13
este es el codigo que eh hecho hasta ahora pero solo estoy tirando flechas :/
Código:
de verdad muchas gracias de antemano y espero puedan ayudarme #include<iostream> using namespace std; int sumar(int V[6]){ int acumulado = 0; int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ acumulado += V[i]; } return acumulado; } void imprimir(int sol[6]){ cout<<"Solucion"<<endl; int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ if(sol[i] != 0){ cout<<sol[i]<<" + "; } } } void imprimir_disp(bool disp[6]){ int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ if(disp[i] == true){ cout<<1<<" "; }else{ cout<<0<<" "; } } cout<<endl; } void imprimir_sol(int sol[6]){ int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ cout<<sol[i]<<" "; } cout<<endl; } void vaciar_vector_sol(int sol[6]){ int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ sol[i] = 0; } } void reiniciar_disp(bool disp[6]){ int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ disp[i] = true; } } void suma2 (int V[6], int obj, bool disp[6] , int sol[6] ,int etapa) { int longitud_vector = 6; for( int i=0; i<longitud_vector; i++){ if( (disp[i]==true) && ( (sumar(sol)+V[i]) <= obj) ) { disp[i] = false; sol[i] = V[i]; /*Si la suma de los elementos del vector de solucion es igual a el resultado buscado */ if (sumar(sol) == obj ){ cout<<"\n=>"; imprimir(sol); }else{ //si no, se hace un llamado recursivo de la funcion para buscar esa solucion suma2(V,obj,disp,sol,etapa+1); } } } } void suma(int Vector[6], int x) { bool Disponibles[6]; int Solucion[6] ,i; int longitud_vector = 6; //cambio todas las pocisiones del vector ah verdadero for(i=0; i<longitud_vector; i++){ Disponibles[i] = true; Solucion[i] = 0; } suma2(Vector,x,Disponibles, Solucion, 0); } int main(){ int Vector[6] = {8,2,3,3,6,4}; //vector //int Vector[6] = {6,4,3,3,5,3}; //vector int longitud_vector = 6; //cout<<"hola "<<longitud_vector<<endl; suma(Vector,13); system("pause"); return 0; }