Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/05/2016, 21:29
Karpenito
 
Fecha de Ingreso: mayo-2016
Mensajes: 6
Antigüedad: 8 años
Puntos: 0
recursividad c++ hallar todas las posibles soluciones de la suma de un vecto

Buenas noches comunidad , tengo un problema con este ejercicio de recursividad , la vdd no se me da muy bien este temam el ejercicio consiste en hallar todas las posibles soluciones de la suma de un vector que tengan como resultado un numero n ejemplo
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:
#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;    
}
de verdad muchas gracias de antemano y espero puedan ayudarme