Lo que se me habia ocurrido a mi es buscar todas las posibles sumas y luego con condiciones imprimir las sumas de 6 digitos que den 128,
O tambien mediante permutaciones, meter los 39 numeros a un vector o matriz y luego con algun algoritmo ir pasando de a 6 cifras a un vector y convinar todas las posibles convinaciones de 6 cifras utilizando los numeros del 1 al 39. Pero no seme ocurre como.
Saludos.... adios.
* Titulo editado por el moderador por decir muy poco del tema a tratar, por favor, revisa el reglamento del foro _________________ Blackbird House
Miembro No. 25400 Registrado: Nov 28, 2007 Mensajes: 192
Publicado: Mie May 07, 2008 2:54 pmAsunto: Re: Ayuda con algoritmo
Supongo que podras hacer algo asi:
Código:
function añadir_numero(int array[6], int vez)
{
if (es solucion) devolver array
else
for(i=1;i<40;i++)
{
array[vez]=i;
if (suma de array <= 128)
añadir_numero(array,vez+1)
}
array[vez]=0;
}
El codigo seguro que esta incompleto pero creo que es suficiente para dar una idea de lo que deberia hacer
La idea es hacer un programa recursivo que haga lo siguiente:
1º añade a la posicion correspondiente del vector el numero i
2º comprueba que la suma del vector es menor o igual a 128
3º si es mayor, el propio codigo se encarga de sobreescribir el resultado e intentarlo con el numero siguiente
4º si es menor o igual, se ejecuta el mismo codigo de la funcion pero para el elemento siguiente
5º si no hay mas candidatos, no se devuelve nada y se pone en la posicion actual un 0. Al acabar la ejecucion de la funcion se ejecutara la anterior que habia sido suspendida, continuando (backtracking)
6º si se llega a una solucion entonces se devuelve esa solucion
Si necesitas todas las soluciones, seria mejor almacenarlas en un vector segun se vayan generando, devolviendo este vector al acabar la ejecucion de la funcion.
Publicado: Mie May 07, 2008 4:09 pmAsunto: Re: 6 sumandos, cada uno del 1 al 39 que den 128?
y tiene que ser en C? en Haskell con listas por comprensión creo que sería muy facil o en prolog gracias a la unificación y resolución saldría rápido.... _________________ PaGe
http://pageegap.blogspot.com/
Lo que se me habia ocurrido a mi es buscar todas las posibles sumas y luego con condiciones imprimir las sumas de 6 digitos que den 128,
O tambien mediante permutaciones, meter los 39 numeros a un vector o matriz y luego con algun algoritmo ir pasando de a 6 cifras a un vector y convinar todas las posibles convinaciones de 6 cifras utilizando los numeros del 1 al 39. Pero no seme ocurre como.
Saludos.... adios.
Querrás decir la suma de 6 números porque entre 1 y 39 los números del 1 al 9 tienen un dígito; los restantes dos. Por otra parte, la restricción de que sumen 128 es importante porque significa que existen diferentes tipos de "topes" (nunca podrás tener cuatro 39 juntos: suman 156) como el siguiente:
Código:
39+39+39+4+4+3=128
Otras soluciones válidas serían:
Código:
39+39+39+4+3+4=128
Código:
39+39+39+3+4+4=128
Código:
39+39+38+4+4+4=128
y así sucesivamente hasta llegar a:
Código:
3+4+4+39+39+39=128
No obstante, ese no el único tope. Esta situación también es válida:
Código:
22+22+22+22+22+18=128
La cuestión es encontrar la lógica de como hacerlos variar para que nunca se supere la suma de 128. Una hoja de cálculo te podría ayudar a encontrar la respuesta, es decir, esa lógica. _________________ "Agua que no has de beber déjala correr"
No puedes publicar nuevos temas en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en encuestas en este foro