none
algoritmo para todas las combinaciones de k elementos en un intervalo de 1...N: ejem k = 2 N = 3: {1,1} {1,2} {1,3 }{2,1} {2,2}... RRS feed

Todas las respuestas

  • Hola AlexiaCarolina

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que para que la comunidad de foros te pueda asesorar mejor, es necesario que nos compartas el form/code que estas desarrollando. Así la comunidad de este foro podrá ayudarte a corregir errores, sugerir mejoras y resolver dudas.

    Te recordamos que esta comunidad no resuelve tareas o proyectos escolares, ni genera códigos a partir de enunciados. Siempre es un gusto poder atender tus dudas.

     

     

    Gracias por usar los foros de MSDN. 

     

    Diana Acuña

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 2 de diciembre de 2019 17:17
    Moderador
  • Hola Alexia Carolina

    Fierísimo algoritmo te pidieron! Si sos principiante, te mataron. 

    Te agradezco, porque para mi incluso fue un ejercicio interesante, pasé un rato, hasta que me di cuenta que la única solución es con algo de lo que no soy muy amigo, los procedimientos recursivos. Inevitable, si se quiere dejar como variable la cantidad de dígitos que hay por cada combinación (k). Si k fuera fijo se podría hacer iterativo, pero con k variable, no. 

    Lo que hace el método Combinar, con n=4 y k=3 por ejemplo, es, dado un List<string> inicial que contiene los dígitos de 1 a n, como strings, toma cada uno (por ejemplo "1") y lo transforma en "11", "12", "13", "14", y lo mismo con los demás dígitos. Luego, que ya son 16, los toma cada uno (por ejemplo "11") y lo transforma en "111", "112", "113", "114", y así con todos hasta "444". De esto se ve que la cantidad de combinaciones es n^k (n elevado a k). El método ObtenerCombinaciones(int n, int k) devuelve un List<string> con todas ellas. 

            private List<string> ObtenerCombinaciones(int n, int k)
            {
                List<string> resultados = new List<string>();
                int a;
                for (a = 1; a <= n; a++)
                    resultados.Add(a.ToString());
    
                for (a = 1; a < k; a++)
                    resultados = Combinar(resultados, n);
    
                return resultados;
            }
    
            private List<string> Combinar(List<string> nums, int n)
            {
                List<string> resultados = new List<string>();
                int a, b;
                for (a = 1; a <= nums.Count; a++)
                {
                    for (b = 1; b <= n; b++)
                        resultados.Add(nums[a - 1] + b.ToString());
                }
                return resultados;
            }
    

    Saludos

    Pablo

    martes, 3 de diciembre de 2019 23:28