From 3f4317880d4f329803e6fd3ef2d1161f04c195f0 Mon Sep 17 00:00:00 2001 From: JOSE LUIS SALA LLORENS Date: Wed, 27 Sep 2023 00:39:11 +0200 Subject: [PATCH 1/2] Reto #38 - C# --- .../c#/deathwing696.cs | 2 +- .../c#/deathwing696.cs | 143 ++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs diff --git a/Retos/Reto #36 - PERMUTACIONES [Media]/c#/deathwing696.cs b/Retos/Reto #36 - PERMUTACIONES [Media]/c#/deathwing696.cs index 17b40f69f6..3fc42c6243 100644 --- a/Retos/Reto #36 - PERMUTACIONES [Media]/c#/deathwing696.cs +++ b/Retos/Reto #36 - PERMUTACIONES [Media]/c#/deathwing696.cs @@ -42,7 +42,7 @@ public static void Main(string[] args) { string c = "hola"; char[] c2 = c.ToCharArray(); - Recursion(c2, 0, c2.Length - 1); + Permuta(c2, 0, c2.Length - 1); Console.ReadKey(); } } diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs b/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs new file mode 100644 index 0000000000..acbe9132f9 --- /dev/null +++ b/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs @@ -0,0 +1,143 @@ +/* + * Crea una función que encuentre todas las combinaciones de los números + * de una lista que suman el valor objetivo. + * - La función recibirá una lista de números enteros positivos + * y un valor objetivo. + * - Para obtener las combinaciones sólo se puede usar + * una vez cada elemento de la lista (pero pueden existir + * elementos repetidos en ella). + * - Ejemplo: Lista = [1, 5, 3, 2], Objetivo = 6 + * Soluciones: [1, 5] y [1, 3, 2] (ambas combinaciones suman 6) + * (Si no existen combinaciones, retornar una lista vacía) + */ + +using System; +using System.Collections.Generic; + +namespace deathwing696 +{ + public class Deathwing696 + { + static private List lista = new List { 1, 5, 3, 2 }; + static private int objetivo = 6; + static private List[] soluciones = new List[Factorial(lista.Count)]; + static private int num_soluciones = 0; + + public static int Factorial(int numero) + { + int total = numero; + + for (int i = numero - 1; i > 0; i--) + { + total *= i; + } + + return total; + } + + public static void Permuta_y_suma(List numeros, int suma, List valores_usados) + { + if (suma == objetivo) + { + valores_usados.Sort(); + valores_usados.Capacity = valores_usados.Count; + + if (!Existe_fila(valores_usados)) + { + soluciones[num_soluciones] = new List(valores_usados); + num_soluciones++; + } + } + else + { + if (suma > objetivo) + { + valores_usados.RemoveAt(valores_usados.Count - 1); + } + else + { + for (int i = 0; i < numeros.Count; i++) + { + int valor = numeros[i]; + numeros.RemoveAt(i); + valores_usados.Add(valor); + Permuta_y_suma(numeros, suma + valor, valores_usados); + valores_usados.Remove(valor); + numeros.Insert(i, valor); + } + } + } + } + + public static void Borra_fila_soluciones(int fila) + { + if (fila == num_soluciones - 1) + { + num_soluciones--; + } + else + { + for (int i = fila; i < num_soluciones; i++) + { + soluciones[i] = soluciones[i + 1]; + } + } + } + + static private bool Iguales(List fila1, List fila2) + { + if (fila1.Count == fila2.Count) + { + for (int i = 0; i < fila1.Count; i++) + { + if (fila1[i] != fila2[i]) + return false; + } + + return true; + } + + return false; + } + + static public bool Existe_fila(List fila) + { + for (int i = 0; i < num_soluciones; i++) + { + if (Iguales(soluciones[i], fila)) + return true; + } + + return false; + } + + public static void Escribe_soluciones_por_pantalla() + { + for (int i = 0; i < num_soluciones; i++) + { + Console.Write("["); + + for (int j = 0; j < soluciones[i].Count; j++) + { + Console.Write(soluciones[i][j]); + + if (j < soluciones[i].Count - 1) + Console.Write(", "); + } + + Console.WriteLine("]"); + } + } + + public static void Main(string[] args) + { + var valores_usados = new List(); + + Permuta_y_suma(lista, 0, valores_usados); + + Escribe_soluciones_por_pantalla(); + + Console.ReadKey(); + } + } +} From b9ce842172b8c9adae2ab5766b36df120aa1a008 Mon Sep 17 00:00:00 2001 From: JOSE LUIS SALA LLORENS Date: Wed, 27 Sep 2023 00:54:04 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Correci=C3=B3n=20m=C3=A9todo=20que=20no=20s?= =?UTF-8?q?e=20usa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../c#/deathwing696.cs | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs b/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs index acbe9132f9..5407d37906 100644 --- a/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs +++ b/Retos/Reto #38 - LAS SUMAS [Media]/c#/deathwing696.cs @@ -69,21 +69,6 @@ public static void Permuta_y_suma(List numeros, int suma, List valores } } - public static void Borra_fila_soluciones(int fila) - { - if (fila == num_soluciones - 1) - { - num_soluciones--; - } - else - { - for (int i = fila; i < num_soluciones; i++) - { - soluciones[i] = soluciones[i + 1]; - } - } - } - static private bool Iguales(List fila1, List fila2) { if (fila1.Count == fila2.Count)