SoloCodigo
Programación Específica => Diseño de Algoritmos => Mensaje iniciado por: vimaci en Miércoles 2 de Agosto de 2006, 19:57
-
Tengo una lista con, por ejemplo, los siguientes elementos: A, B, C, D, E y tengo que escribir todas las combinaciones posibles de N elementos (siendo N un parametro que me dan en la llamada del programa)
por ejemplo, para N=2 las combinaciones serían
A, B, C, D, E, AA, AB, AC, AD, AE, BA, BB, BC, BD, BE, CA, CB, CC, CD, CE, DA, DB, DC, DD, DE, EA, EB, EC, ED, EE
tengo que hacer una funcioncilla que me haga esto, y no se como hacerlo, agradezco cualquier sugerencia
-
Trasladé a Diseño de Algoritmos, seguramente tendrás mas suerte aqui :rolleyes:
-
Hola, que tal.
Eso es fácil, lo único que tienes que hacer es tomar tu primer caracter, luego el segundo, después el tercero y así sucesivamente hasta que completes los N carateres. Esto lo deberas hacer recursivamente para que cuando regrese tu función, tomes el siguiente caracter.
Espero que me hayas entendido como.
Hasta luego.
-
Se que lo tengo que hacer recursivamente, pero estoy muuuuuuuuuuy pez en recursividad y no sé como hacerlo...
no encuentro por ahí nada parecido que me pueda orientar, asique solicito ayuda!!!!!!!
Voy a describir mi programa un poco mas a fondo. Tengo un programa que me lee de un fichero las letras que estén almacenadas y me las almacena en una lista, y ahora tengo que coger estas letras que tenga almacenadas en la lista y escribir en otra lista todas las posibles combinaciones de letras que se pudieran crear con estas letras. El tamaño de las letras que tengo que crear va desde 1 (es decir, enumerar todas las letras que tengo) hasta N, siendo N un numero que introduzco como variable a la funcion. Todas las letras se pueden repetir el numero de veces que haga falta.
P.D:El programa lo estoy codificando en PASCAL/Delphi
Muchas gracias
-
ya está hecho
-
Hola.
La verdad no le entiendo muy bien a tu código, pero yo creo que sería más fácil que utilices un arreglo, ya que de esta forma sólo retornas el indice y no pierdes tus elementos como dices que te esta pasando, amenos que te lo hayan pedido con listas entonces revisa bien lo que haces.
Hasta luego.
-
bueno, al final conseguí hacer la combinacion, el codigo utilizado es el siguiente, es evidente que tengo una unidad para la gestion de las listas:
procedure Combinacion(M,N:integer; coleccion : tlista; var comb:tlista);
..var
....letra,aux : tlista;
..procedure Combina(pos : integer);
....var i:integer;
......s,pal:tinfo;
....begin
......pal:='';
......if pos > M then
........begin
..........aux:=letra;
..........while aux<>nil do
............begin
..............pal:=pal+(aux^.info);
..............aux:=aux^.sig;
............end;
..........InsertarAlFinal(comb, pal);
..........borrarultimonodo(letra);
........end
......else
........begin
..........for i := 1 to N do
............begin
..............obtenerinfopos(coleccion, s, i);
..............Insertar(letra,s,pos);
..............Combina(pos + 1);
............end;
..........borrarultimonodo(letra);
........end
....end;
..begin
......crear(letra);
......Combina(1);
..end;