Ejercicios
Aquí están todos los ejercicios del curso en un solo lugar. Primero 50 ejercicios independientes, desde «Hola, mundo» hasta el camino más corto en una cuadrícula, cada uno con un ejemplo y una solución en C# comprobada con un compilador real. Después, los ejercicios de las lecciones, por módulos: cada uno lleva a la lección que explica lo que necesitas.
50 ejercicios para practicar
1. Hello World
Imprime en la consola el texto Hello, World!; el programa no tiene entrada.
Sin entrada.
Salida Hello, World!Lo que necesitas está en la lección: Tu primer programa
Solución
class Program{static void Main(){Console.WriteLine("Hello, World!");}}2. Saluda al usuario
Lee un nombre de una línea y saluda a la persona por su nombre con la forma «Hola, <nombre>!».
Entrada MaríaSalida Hola, María!Lo que necesitas está en la lección: Entrada y salida
Solución
class Program{static void Main(){string name = Console.ReadLine();Console.WriteLine("Hola, " + name + "!");}}3. Imprime la edad
Lee la edad del usuario (un número entero), guárdala en una variable e imprímela en una frase.
Entrada 17Salida Tienes 17 años.Lo que necesitas está en la lección: Variables y tipos
Solución
class Program{static void Main(){int age = int.Parse(Console.ReadLine());Console.WriteLine("Tienes " + age + " años.");}}4. Conversor de unidades
Lee una longitud en pulgadas (puede ser un número decimal) y conviértela a centímetros: 1 pulgada = 2.54 cm. Imprime el resultado con 2 decimales.
Entrada 12.5Salida 31.75 cmLo que necesitas está en la lección: Operadores y aritmética
Solución
using System.Globalization;class Program{static void Main(){double inches = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);Console.WriteLine((inches * 2.54).ToString("F2", CultureInfo.InvariantCulture) + " cm");}}5. Par o impar
Lee un número entero e imprime si es par o impar.
Entrada 7Salida 7 es impar.Lo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int number = int.Parse(Console.ReadLine());if (number % 2 == 0){Console.WriteLine(number + " es par.");}else{Console.WriteLine(number + " es impar.");}}}6. Suma de dos números
Lee dos números enteros, cada uno en su propia línea, e imprime su suma.
Entrada 1230Salida La suma es 42.Lo que necesitas está en la lección: Operadores y aritmética
Solución
class Program{static void Main(){int first = int.Parse(Console.ReadLine());int second = int.Parse(Console.ReadLine());Console.WriteLine("La suma es " + (first + second) + ".");}}7. Área de un cuadrado
Lee el lado de un cuadrado (un número entero) e imprime su área.
Entrada 5Salida El área es 25.Lo que necesitas está en la lección: Operadores y aritmética
Solución
class Program{static void Main(){int side = int.Parse(Console.ReadLine());Console.WriteLine("El área es " + side * side + ".");}}8. Volumen de una esfera
Lee el radio r (puede ser un número decimal) e imprime el volumen de la esfera V = 4/3 · π · r³ con 2 decimales.
Entrada 3Salida El volumen es 113.10.Lo que necesitas está en la lección: Operadores y aritmética
Solución
using System.Globalization;class Program{static void Main(){double r = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);double volume = 4.0 / 3 * Math.PI * r * r * r;Console.WriteLine("El volumen es " + volume.ToString("F2", CultureInfo.InvariantCulture) + ".");}}9. Compara dos números
Lee dos números enteros, cada uno en su propia línea, e imprime el mayor (si son iguales, cualquiera de los dos).
Entrada 815Salida El mayor es 15.Lo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int a = int.Parse(Console.ReadLine());int b = int.Parse(Console.ReadLine());if (a > b){Console.WriteLine("El mayor es " + a + ".");}else{Console.WriteLine("El mayor es " + b + ".");}}}10. ¿Es un triángulo?
Lee tres números enteros, cada uno en su propia línea, y comprueba si pueden ser los lados de un triángulo: la suma de dos cualesquiera tiene que ser mayor que el tercero.
Entrada 345Salida Pueden formar un triángulo.Lo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int a = int.Parse(Console.ReadLine());int b = int.Parse(Console.ReadLine());int c = int.Parse(Console.ReadLine());if (a + b > c && a + c > b && b + c > a){Console.WriteLine("Pueden formar un triángulo.");}else{Console.WriteLine("No pueden formar un triángulo.");}}}11. La nota en palabras
Lee una nota de la escala búlgara del 2 al 6 (puede ser decimal) e imprímela en palabras: desde 5.50 es Excelente, desde 4.50 Muy bien, desde 3.50 Bien, desde 3.00 Suficiente y por debajo de 3.00 Insuficiente.
Entrada 4.75Salida Muy bienLo que necesitas está en la lección: Condiciones
Solución
using System.Globalization;class Program{static void Main(){double grade = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);if (grade >= 5.5){Console.WriteLine("Excelente");}else if (grade >= 4.5){Console.WriteLine("Muy bien");}else if (grade >= 3.5){Console.WriteLine("Bien");}else if (grade >= 3){Console.WriteLine("Suficiente");}else{Console.WriteLine("Insuficiente");}}}12. De horas a segundos
Lee un número de horas (un número entero) e imprime cuántos segundos son.
Entrada 2Salida 7200 segundosLo que necesitas está en la lección: Operadores y aritmética
Solución
class Program{static void Main(){int hours = int.Parse(Console.ReadLine());Console.WriteLine(hours * 3600 + " segundos");}}13. Contar hasta N
Lee un número entero N e imprime los números del 1 al N, cada uno en una línea nueva.
Entrada 5Salida 12345Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());for (int i = 1; i <= n; i++){Console.WriteLine(i);}}}14. Valor ASCII
Lee un carácter (el primer carácter de la línea) e imprime su código ASCII, es decir, el número con el que la computadora lo guarda.
Entrada ASalida El código de A es 65.Lo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){char symbol = Console.ReadLine()[0];Console.WriteLine("El código de " + symbol + " es " + (int)symbol + ".");}}15. Ecuación cuadrática
Lee a, b y c, cada uno en su propia línea, y resuelve ax² + bx + c = 0. Con dos raíces imprime «x1 = …, x2 = …» (x1 usa +√D), con una raíz «x = …», con 2 decimales; si no hay raíces reales o a es 0, dilo.
Entrada 1-32Salida x1 = 2.00, x2 = 1.00Lo que necesitas está en la lección: Condiciones
Solución
using System.Globalization;class Program{static void Main(){double a = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);double b = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);double c = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);if (a == 0){Console.WriteLine("No es una ecuación cuadrática");}else{double d = b * b - 4 * a * c;if (d > 0){double x1 = (-b + Math.Sqrt(d)) / (2 * a);double x2 = (-b - Math.Sqrt(d)) / (2 * a);Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "x1 = {0:F2}, x2 = {1:F2}", x1, x2));}else if (d == 0){Console.WriteLine(string.Format(CultureInfo.InvariantCulture, "x = {0:F2}", -b / (2 * a)));}else{Console.WriteLine("No hay raíces reales");}}}}16. Positivo o negativo
Lee un número entero e imprime si es positivo, negativo o cero.
Entrada -4Salida NegativoLo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int number = int.Parse(Console.ReadLine());if (number > 0){Console.WriteLine("Positivo");}else if (number < 0){Console.WriteLine("Negativo");}else{Console.WriteLine("Cero");}}}17. Estaciones
Lee un número de mes (1–12) e imprime su estación: 12, 1 y 2 son Invierno, 3–5 Primavera, 6–8 Verano y 9–11 Otoño. Para cualquier otro número imprime «Mes no válido».
Entrada 4Salida PrimaveraLo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int month = int.Parse(Console.ReadLine());if (month < 1 || month > 12){Console.WriteLine("Mes no válido");}else if (month == 12 || month <= 2){Console.WriteLine("Invierno");}else if (month <= 5){Console.WriteLine("Primavera");}else if (month <= 8){Console.WriteLine("Verano");}else{Console.WriteLine("Otoño");}}}18. Número al revés
Lee un número entero positivo e imprime el número con sus cifras en orden inverso: 123 se convierte en 321. Los ceros que quedan delante desaparecen (1200 se convierte en 21). Toma la última cifra con % 10 y quítala dividiendo entre 10.
Entrada 9071Salida 1709Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());int reversed = 0;while (n > 0){reversed = reversed * 10 + n % 10;n /= 10;}Console.WriteLine(reversed);}}19. Conversor de temperatura
Lee una temperatura en grados Celsius (puede llevar punto decimal) e imprímela en Fahrenheit con dos decimales. La fórmula es F = C * 9 / 5 + 32.
Entrada 36.6Salida 97.88 °FLo que necesitas está en la lección: Operadores y aritmética
Solución
using System.Globalization;class Program{static void Main(){double celsius = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture);double fahrenheit = celsius * 9 / 5 + 32;Console.WriteLine(fahrenheit.ToString("F2", CultureInfo.InvariantCulture) + " °F");}}20. El nombre más largo
La primera línea tiene la cantidad de nombres n, y cada una de las n líneas siguientes tiene un nombre. Imprime el nombre con más letras y su cantidad entre paréntesis; si dos nombres son igual de largos, imprime el primero de ellos.
Entrada 4AnaAlejandraJuanGuadalupeSalida Alejandra (9 letras)Lo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());string longest = "";for (int i = 0; i < n; i++){string name = Console.ReadLine();if (name.Length > longest.Length){longest = name;}}Console.WriteLine($"{longest} ({longest.Length} letras)");}}21. Contador de palabras
Lee una línea de texto e imprime cuántas palabras tiene. Las palabras están separadas por uno o más espacios, así que los trozos vacíos entre dos espacios no son palabras.
Entrada Escribo código cada día y mejoroSalida 6Lo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string line = Console.ReadLine();string[] words = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);Console.WriteLine(words.Length);}}22. Número primo
Lee un número entero n y comprueba si es primo: mayor que 1 y divisible solo entre 1 y entre sí mismo. Basta con probar los divisores i para los que i * i <= n.
Entrada 91Salida 91 no es primoLo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());bool prime = n > 1;for (int i = 2; i * i <= n; i++){if (n % i == 0){prime = false;break;}}if (prime){Console.WriteLine(n + " es primo");}else{Console.WriteLine(n + " no es primo");}}}23. Día de la semana
Lee un número del 1 al 7 e imprime el nombre de ese día de la semana, donde 1 es el lunes. Guarda los nombres en un array; para cualquier otro número imprime «No existe ese día».
Entrada 5Salida ViernesLo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){int day = int.Parse(Console.ReadLine());string[] days = { "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo" };if (day >= 1 && day <= 7){Console.WriteLine(days[day - 1]);}else{Console.WriteLine("No existe ese día");}}}24. Factorial
Lee un número entero n del 0 al 15 e imprime n! = 1 * 2 * ... * n (0! es 1). Ya 13! no cabe en un int, así que en Java y C# guarda el producto en un long.
Entrada 15Salida 15! = 1307674368000Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());long factorial = 1;for (int i = 2; i <= n; i++){factorial *= i;}Console.WriteLine($"{n}! = {factorial}");}}25. Fecha válida
Lee un día, un mes y un año, cada uno en su propia línea, e imprime «Fecha válida» o «Fecha no válida». El año es al menos 1, el mes va del 1 al 12 y el día del 1 al número de días de ese mes; febrero tiene 29 días en un año bisiesto (divisible entre 4 pero no entre 100, salvo que sea divisible entre 400).
Entrada 2922100Salida Fecha no válidaLo que necesitas está en la lección: Condiciones
Solución
class Program{static void Main(){int day = int.Parse(Console.ReadLine());int month = int.Parse(Console.ReadLine());int year = int.Parse(Console.ReadLine());bool leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;int days;if (month == 2){days = leap ? 29 : 28;}else if (month == 4 || month == 6 || month == 9 || month == 11){days = 30;}else{days = 31;}if (year >= 1 && month >= 1 && month <= 12 && day >= 1 && day <= days){Console.WriteLine("Fecha válida");}else{Console.WriteLine("Fecha no válida");}}}26. Frecuencia de letras
Lee una línea de texto e imprime cuántas veces aparece cada letra en ella, sin distinguir mayúsculas y minúsculas. Imprime las letras en orden alfabético, una por línea, con la forma «a: 5»; los espacios y los signos de puntuación no se cuentan.
Entrada ¡Hola, Mundo!Salida a: 1d: 1h: 1l: 1m: 1n: 1o: 2u: 1Lo que necesitas está en la lección: Dictionary y HashSet
Solución
class Program{static void Main(){string text = Console.ReadLine().ToLower();SortedDictionary<char, int> counts = new SortedDictionary<char, int>();foreach (char c in text){if (char.IsLetter(c)){counts[c] = counts.GetValueOrDefault(c, 0) + 1;}}foreach (KeyValuePair<char, int> pair in counts){Console.WriteLine($"{pair.Key}: {pair.Value}");}}}27. Mínimo y máximo en un array
La primera línea tiene la cantidad n, y cada una de las n líneas siguientes tiene un número entero. Léelos en un array e imprime el menor y el mayor, empezando por el primer elemento y comparándolo con los demás.
Entrada 57-31204Salida Mínimo: -3Máximo: 12Lo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());int[] numbers = new int[n];for (int i = 0; i < n; i++){numbers[i] = int.Parse(Console.ReadLine());}int min = numbers[0];int max = numbers[0];for (int i = 1; i < n; i++){if (numbers[i] < min){min = numbers[i];}if (numbers[i] > max){max = numbers[i];}}Console.WriteLine("Mínimo: " + min);Console.WriteLine("Máximo: " + max);}}28. Ordenar un array
La primera línea tiene la cantidad n, y cada una de las n líneas siguientes tiene un número entero. Ordénalos tú mismo de menor a mayor con el método de la burbuja (n - 1 pasadas; en cada una intercambias los vecinos que están en el orden equivocado) e imprímelos en una línea, separados por espacios.
Entrada 6529156Salida 1 2 5 5 6 9Lo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());int[] numbers = new int[n];for (int i = 0; i < n; i++){numbers[i] = int.Parse(Console.ReadLine());}for (int pass = 0; pass < n - 1; pass++){for (int i = 0; i < n - 1 - pass; i++){if (numbers[i] > numbers[i + 1]){int temp = numbers[i];numbers[i] = numbers[i + 1];numbers[i + 1] = temp;}}}Console.WriteLine(string.Join(" ", numbers));}}29. Reemplazar las vocales
Lee una línea de texto e imprímela con cada vocal, mayúscula o minúscula, reemplazada por el carácter *. Las vocales son a, e, i, o, u, también con tilde (á, é, í, ó, ú).
Entrada Me encanta programarSalida M* *nc*nt* pr*gr*m*rLo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string text = Console.ReadLine();string vowels = "aeiouáéíóú";string result = "";foreach (char c in text){if (vowels.Contains(char.ToLower(c))){result += "*";}else{result += c;}}Console.WriteLine(result);}}30. Suma de las cifras
Lee un número entero no negativo e imprime la suma de sus cifras. La última cifra es n % 10, y n / 10 la quita (n // 10 en Python).
Entrada 9875Salida 29Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());int sum = 0;while (n > 0){sum += n % 10;n /= 10;}Console.WriteLine(sum);}}31. Palíndromo
Lee una línea de texto y comprueba si es un palíndromo, es decir, si se lee igual al revés. Las mayúsculas y las minúsculas cuentan como iguales y los espacios se saltan. Imprime «Palíndromo» o «No es palíndromo».
Entrada Anita lava la tinaSalida PalíndromoLo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string text = Console.ReadLine().ToLower().Replace(" ", "");bool palindrome = true;for (int i = 0; i < text.Length / 2; i++){if (text[i] != text[text.Length - 1 - i]){palindrome = false;break;}}if (palindrome){Console.WriteLine("Palíndromo");}else{Console.WriteLine("No es palíndromo");}}}32. Contraseña segura
Lee contraseñas, una por línea, hasta que llegue una segura: al menos 8 caracteres, al menos una cifra, una letra mayúscula y una minúscula. Para cada contraseña débil imprime la primera regla que no cumple, en este orden («Demasiado corta», «Sin cifra», «Sin mayúscula», «Sin minúscula»); para la segura imprime «Contraseña aceptada» y detente.
Entrada kotkakotkamiaukotkamiau7Kotkamiau7Salida Demasiado cortaSin cifraSin mayúsculaContraseña aceptadaLo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){while (true){string password = Console.ReadLine();bool digit = false;bool upper = false;bool lower = false;foreach (char c in password){if (char.IsDigit(c)){digit = true;}else if (char.IsUpper(c)){upper = true;}else if (char.IsLower(c)){lower = true;}}if (password.Length < 8){Console.WriteLine("Demasiado corta");}else if (!digit){Console.WriteLine("Sin cifra");}else if (!upper){Console.WriteLine("Sin mayúscula");}else if (!lower){Console.WriteLine("Sin minúscula");}else{Console.WriteLine("Contraseña aceptada");break;}}}}33. Array al revés
La primera línea tiene la cantidad n, y cada una de las n líneas siguientes tiene un número entero. Léelos en un array e imprímelos en orden inverso en una línea, separados por espacios: recorre el array desde el último índice hasta el cero.
Entrada 410-273Salida 3 7 -2 10Lo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());int[] numbers = new int[n];for (int i = 0; i < n; i++){numbers[i] = int.Parse(Console.ReadLine());}for (int i = n - 1; i >= 0; i--){Console.Write(numbers[i]);if (i > 0){Console.Write(" ");}}Console.WriteLine();}}34. Contar los elementos
Lee una línea de palabras separadas por un solo espacio e imprime cuántas veces aparece cada palabra, con la forma «palabra: cantidad». Las palabras salen en el orden en que aparecieron por primera vez.
Entrada manzana pera manzana ciruela pera manzanaSalida manzana: 3pera: 2ciruela: 1Lo que necesitas está en la lección: Dictionary y HashSet
Solución
class Program{static void Main(){string line = Console.ReadLine();Dictionary<string, int> counts = new Dictionary<string, int>();foreach (string word in line.Split(' ')){counts[word] = counts.GetValueOrDefault(word, 0) + 1;}foreach (KeyValuePair<string, int> pair in counts){Console.WriteLine($"{pair.Key}: {pair.Value}");}}}35. Números primos
Lee un número N e imprime en una línea, separados por espacios, todos los números primos del 2 al N.
Entrada 30Salida 2 3 5 7 11 13 17 19 23 29Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());string result = "";for (int i = 2; i <= n; i++){bool prime = true;for (int d = 2; d * d <= i; d++){if (i % d == 0){prime = false;break;}}if (prime){result += i + " ";}}Console.WriteLine(result.Trim());}}36. Media
Una línea tiene números enteros separados por espacios. Imprime su media con dos decimales.
Entrada 5 8 12 6Salida Media: 7.75Lo que necesitas está en la lección: Arrays
Solución
using System.Globalization;class Program{static void Main(){string[] parts = Console.ReadLine().Split(' ');int sum = 0;for (int i = 0; i < parts.Length; i++){sum += int.Parse(parts[i]);}double average = (double)sum / parts.Length;Console.WriteLine("Media: " + average.ToString("F2", CultureInfo.InvariantCulture));}}37. Ordenar por longitud
Una línea tiene palabras separadas por espacios. Ordénalas por longitud, de la más corta a la más larga (las palabras de igual longitud mantienen el orden de la entrada), e imprímelas en una línea.
Entrada cereza higo banana kiwi ciruelaSalida higo kiwi cereza banana ciruelaLo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string[] words = Console.ReadLine().Split(' ');for (int i = 0; i < words.Length - 1; i++){for (int j = 0; j < words.Length - 1 - i; j++){if (words[j].Length > words[j + 1].Length){string temp = words[j];words[j] = words[j + 1];words[j + 1] = temp;}}}Console.WriteLine(string.Join(" ", words));}}38. Contador de oraciones
Lee una línea de texto e imprime cuántas oraciones tiene. Una oración termina con un punto, un signo de exclamación o un signo de interrogación; una serie de esos signos (como «...» o «?!») es un solo final.
Entrada ¡Hola! ¿Cómo estás? Estoy bien... ¿Y tú?!Salida Oraciones: 4Lo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string text = Console.ReadLine();string ends = ".!?";int count = 0;for (int i = 0; i < text.Length; i++){bool isEnd = ends.Contains(text[i]);bool nextIsEnd = i + 1 < text.Length && ends.Contains(text[i + 1]);if (isEnd && !nextIsEnd){count++;}}Console.WriteLine("Oraciones: " + count);}}39. Números de Fibonacci
La sucesión de Fibonacci empieza con 1, 1, y cada número siguiente es la suma de los dos anteriores. Lee N (del 1 al 50) e imprime el N-ésimo número de la sucesión.
Entrada 40Salida 102334155Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){int n = int.Parse(Console.ReadLine());long previous = 0;long current = 1;for (int i = 1; i < n; i++){long next = previous + current;previous = current;current = next;}Console.WriteLine(current);}}40. Calcular la mediana
Una línea tiene números enteros separados por espacios. Imprime su mediana con un decimal: el número del medio una vez ordenados, o la media de los dos del medio cuando la cantidad es par.
Entrada 12 3 7 9 1 8Salida Mediana: 7.5Lo que necesitas está en la lección: Listas
Solución
using System.Globalization;class Program{static void Main(){List<int> numbers = new List<int>();foreach (string part in Console.ReadLine().Split(' ')){numbers.Add(int.Parse(part));}numbers.Sort();int n = numbers.Count;double median;if (n % 2 == 1){median = numbers[n / 2];}else{median = (numbers[n / 2 - 1] + numbers[n / 2]) / 2.0;}Console.WriteLine("Mediana: " + median.ToString("F1", CultureInfo.InvariantCulture));}}41. Gráfico de caracteres
Lee una línea de texto. Para cada carácter que no sea el espacio, en el orden en que aparece por primera vez, imprime una línea «carácter | estrellas» con una estrella por cada vez que aparece en el texto.
Entrada pan de bananaSalida p | *a | ****n | ***d | *e | *b | *Lo que necesitas está en la lección: Cadenas: trabajar con texto
Solución
class Program{static void Main(){string text = Console.ReadLine();for (int i = 0; i < text.Length; i++){char c = text[i];if (c != ' ' && text.IndexOf(c) == i){int count = 0;for (int j = 0; j < text.Length; j++){if (text[j] == c){count++;}}Console.WriteLine(c + " | " + new string('*', count));}}}}42. Trasponer una matriz
La primera línea tiene el número de filas R y de columnas C, y le siguen R líneas con C números separados por espacios. Imprime la matriz traspuesta: C líneas con R números, donde las filas pasan a ser columnas.
Entrada 2 31 2 34 5 6Salida 1 42 53 6Lo que necesitas está en la lección: Arrays bidimensionales
Solución
class Program{static void Main(){string[] size = Console.ReadLine().Split(' ');int rows = int.Parse(size[0]);int cols = int.Parse(size[1]);int[,] matrix = new int[rows, cols];for (int r = 0; r < rows; r++){string[] parts = Console.ReadLine().Split(' ');for (int c = 0; c < cols; c++){matrix[r, c] = int.Parse(parts[c]);}}for (int c = 0; c < cols; c++){string line = "";for (int r = 0; r < rows; r++){line += matrix[r, c] + " ";}Console.WriteLine(line.Trim());}}}43. Caminos en un laberinto
La primera línea tiene R y C, y le siguen R líneas de C caracteres: «.» es una celda libre y «#» es una pared. Moviéndote solo a la derecha o hacia abajo y sin pisar nunca una pared, imprime el número de todos los caminos desde la esquina superior izquierda hasta la inferior derecha.
Entrada 4 5......#.#....#.#....Salida Caminos: 4Lo que necesitas está en la lección: Recursión
Solución
class Program{static int CountPaths(string[] maze, int r, int c){if (r >= maze.Length || c >= maze[0].Length || maze[r][c] == '#'){return 0;}if (r == maze.Length - 1 && c == maze[0].Length - 1){return 1;}return CountPaths(maze, r + 1, c) + CountPaths(maze, r, c + 1);}static void Main(){string[] size = Console.ReadLine().Split(' ');int rows = int.Parse(size[0]);string[] maze = new string[rows];for (int r = 0; r < rows; r++){maze[r] = Console.ReadLine();}Console.WriteLine("Caminos: " + CountPaths(maze, 0, 0));}}44. Estadística de notas
Una línea tiene notas del 2 al 6 (la escala escolar búlgara, 6 es la mejor), separadas por espacios. Imprime cuántas son excelentes, muy bien, bien, suficientes e insuficientes, cada categoría en su propia línea.
Entrada 6 4 5 6 3 5 2 6 5 4Salida Excelente (6): 3Muy bien (5): 3Bien (4): 2Suficiente (3): 1Insuficiente (2): 1Lo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){string[] names = { "", "", "Insuficiente", "Suficiente", "Bien", "Muy bien", "Excelente" };int[] counts = new int[7];string[] parts = Console.ReadLine().Split(' ');for (int i = 0; i < parts.Length; i++){counts[int.Parse(parts[i])]++;}for (int grade = 6; grade >= 2; grade--){Console.WriteLine(names[grade] + " (" + grade + "): " + counts[grade]);}}}45. Números romanos
Lee un número entero del 1 al 3999 e imprímelo en números romanos (I, V, X, L, C, D, M, donde 4 es IV, 9 es IX, 40 es XL, etc.).
Entrada 1994Salida MCMXCIVLo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){int number = int.Parse(Console.ReadLine());int[] values = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };string[] symbols = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };string roman = "";for (int i = 0; i < values.Length; i++){while (number >= values[i]){roman += symbols[i];number -= values[i];}}Console.WriteLine(roman);}}46. Simulación de una moneda
Lee una semilla x (del 1 al 2147483646) y un número de lanzamientos N, cada uno en su propia línea. En cada lanzamiento haz x = x * 16807 % 2147483647; un x par es cara (C) y un x impar es cruz (X). Imprime los lanzamientos en una línea y después cuántas veces salió cara y cuántas cruz.
Entrada 4210Salida CXXXCXXCCXCara: 4Cruz: 6Lo que necesitas está en la lección: Bucles
Solución
class Program{static void Main(){long x = long.Parse(Console.ReadLine());int n = int.Parse(Console.ReadLine());string tosses = "";int heads = 0;for (int i = 0; i < n; i++){x = x * 16807 % 2147483647;if (x % 2 == 0){tosses += "C";heads++;}else{tosses += "X";}}Console.WriteLine(tosses);Console.WriteLine("Cara: " + heads);Console.WriteLine("Cruz: " + (n - heads));}}47. Array simétrico
Una línea tiene números enteros separados por espacios. Comprueba si el array es simétrico, es decir, si se lee igual de izquierda a derecha y de derecha a izquierda.
Entrada 1 2 3 2 1Salida SimétricoLo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){string[] parts = Console.ReadLine().Split(' ');int[] numbers = new int[parts.Length];for (int i = 0; i < parts.Length; i++){numbers[i] = int.Parse(parts[i]);}bool symmetric = true;for (int i = 0; i < numbers.Length / 2; i++){if (numbers[i] != numbers[numbers.Length - 1 - i]){symmetric = false;break;}}Console.WriteLine(symmetric ? "Simétrico" : "No simétrico");}}48. Paréntesis equilibrados
Lee una línea de texto y comprueba si sus paréntesis (), [] y {} están equilibrados: cada uno que abre tiene uno que cierra del mismo tipo y los pares no se cruzan. Los demás caracteres no cuentan.
Entrada (a + [b) * c]Salida No equilibradosLo que necesitas está en la lección: Pila, cola y lista enlazada
Solución
class Program{static void Main(){string text = Console.ReadLine();string opening = "([{";string closing = ")]}";Stack<char> stack = new Stack<char>();bool balanced = true;foreach (char c in text){if (opening.Contains(c)){stack.Push(c);}else if (closing.Contains(c)){if (stack.Count == 0 || opening.IndexOf(stack.Pop()) != closing.IndexOf(c)){balanced = false;break;}}}if (balanced && stack.Count == 0){Console.WriteLine("Equilibrados");}else{Console.WriteLine("No equilibrados");}}}49. Serie de elementos iguales
Una línea tiene números enteros separados por espacios. Encuentra la serie más larga de números vecinos iguales e imprímela en una línea; si varias series tienen la misma longitud, imprime la primera.
Entrada 2 1 1 3 3 3 2 2 2 5Salida 3 3 3Lo que necesitas está en la lección: Arrays
Solución
class Program{static void Main(){string[] parts = Console.ReadLine().Split(' ');int[] numbers = new int[parts.Length];for (int i = 0; i < parts.Length; i++){numbers[i] = int.Parse(parts[i]);}int bestValue = numbers[0];int bestLength = 1;int length = 1;for (int i = 1; i < numbers.Length; i++){if (numbers[i] == numbers[i - 1]){length++;}else{length = 1;}if (length > bestLength){bestLength = length;bestValue = numbers[i];}}string result = "";for (int i = 0; i < bestLength; i++){result += bestValue + " ";}Console.WriteLine(result.Trim());}}50. Camino más corto en una cuadrícula
La primera línea tiene R y C, y le siguen R líneas de C caracteres: «.» es una celda libre, «#» es una pared, «S» es el inicio y «E» es la meta. Moviéndote hacia arriba, abajo, izquierda y derecha, imprime el menor número de movimientos de S a E, o «No hay camino» si E no se puede alcanzar.
Entrada 5 6S.#....##.#....#..#.#..#...E.#Salida 7Lo que necesitas está en la lección: Pila, cola y lista enlazada
Solución
class Program{static void Main(){string[] size = Console.ReadLine().Split(' ');int rows = int.Parse(size[0]);int cols = int.Parse(size[1]);string[] grid = new string[rows];for (int r = 0; r < rows; r++){grid[r] = Console.ReadLine();}int[,] dist = new int[rows, cols];Queue<int[]> queue = new Queue<int[]>();for (int r = 0; r < rows; r++){for (int c = 0; c < cols; c++){dist[r, c] = -1;if (grid[r][c] == 'S'){dist[r, c] = 0;queue.Enqueue(new int[] { r, c });}}}int[] dr = { -1, 1, 0, 0 };int[] dc = { 0, 0, -1, 1 };string answer = "No hay camino";while (queue.Count > 0){int[] cell = queue.Dequeue();int r = cell[0];int c = cell[1];if (grid[r][c] == 'E'){answer = dist[r, c].ToString();break;}for (int d = 0; d < 4; d++){int nr = r + dr[d];int nc = c + dc[d];if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && grid[nr][nc] != '#' && dist[nr, nc] == -1){dist[nr, nc] = dist[r, c] + 1;queue.Enqueue(new int[] { nr, nc });}}}Console.WriteLine(answer);}}
Ejercicios de las lecciones
Sección «Ejercicios de las lecciones»Fundamentos del lenguaje
- Tu primer programa: Hello World · Tarjeta de visita · Marco
- Variables y tipos: Intercambio · Edad · La ficha de un hotel
- Entrada y salida: Saludo por nombre · Suma de dos números · Dos textos en uno · π con dos cifras
- Operadores y aritmética: Media de tres números · Segundos en horas · Volumen de una esfera · Celsius a Fahrenheit
- Condiciones: Una entrada de cine · Una minicalculadora · Una ecuación cuadrática · Una fecha válida
- Bucles: Tabla de multiplicar · Número primo · Las cifras de un número · Adivina el número
- Arrays: Suma, pares, impares · Al revés · Mínimo, máximo, media
- Arrays: Ordenación · La racha más larga · Estadística de notas
- Arrays bidimensionales: Diagonales y filas · Gira la tabla
- Arrays bidimensionales: ¿Cuántos caminos hay? · El camino más corto
- Cadenas: trabajar con texto: El nombre al revés · Número de palabras · Palíndromo
- Cadenas: trabajar con texto: Contraseña segura
Métodos
- Métodos: Recibo · Triángulo
- Parámetros y return: Media aritmética · Número primo · Temperaturas · Calculadora · Un triángulo con parámetro
- Parámetros y return
- Sobrecarga: El mayor · Nota media · Una línea del recibo
- Recursión: Factorial de dos formas · Suma de cifras · Fibonacci · Palíndromo
Clases y objetos
- Clases y objetos: Libro · Coche · El carrito · El más caro primero
- Constructores y this: Persona · Animal · Paso de baile
- Métodos de instancia
- Métodos de instancia
- Encapsulamiento: Persona · Una cuenta sin números rojos · Animal
- static: lo que comparten todos los objetos: Pedidos · Calculadora · Cambio de divisas
Herencia y polimorfismo
- Herencia: Coche familiar · Estudiante · Breakdance · Coche eléctrico
- Polimorfismo: Refugio de animales · El estudiante se presenta · Fiesta
- Clases abstractas: Área y perímetro · Animales
- Clases abstractas: Vehículos · Actuaciones
- Interfaces: Claxon · Datos · Baile · DJ · El estanque
- Comprobaciones de tipo: Aparcamiento · Bailes · Flota · Zoológico
- Principios de la POO
- Principios de la POO: Un autónomo · La terraza sin if
Errores y excepciones
- Excepciones: Texto a número · No hay tal producto · Pedido medio
- try, catch y finally: Precio por persona · Calculadora
- Lanzar excepciones y crear las tuyas: Tienda de música · Una cuenta con reglas · Edad no válida
Colecciones
- Listas: Una estantería · Un registro de eventos · Un cuaderno · Cálculo mental
- Pila, cola y lista enlazada: Un tren de juguete · Una línea de autobús · Un indicador de bolsa · Paréntesis equilibrados · Tu propia lista enlazada
- Dictionary y HashSet: Una tabla de usuarios · Frecuencia de palabras · Documentos por palabra clave · Una red de contactos
- Códigos hash y funciones hash: Un código hash para una persona · El robot del almacén · El hash de un archivo
- Clases anidadas: Carrito de compras · Monitor de un servidor web · Administrador de un edificio · Clasificación
C# moderno
- Lambdas y delegados: Ordenar por varios campos · Filtrar pedidos · Descuentos uno tras otro
- LINQ: Ventas por categoría · Los 3 mejores productos · Nota media · Las palabras de un texto
- record, switch y patrones: Figuras · Precio del envío · Un punto como clave
- Patrones de diseño: Descuentos como estrategias · «Avísame cuando haya stock» · Una fábrica de notificaciones · Un termómetro antiguo
Programas en el mundo real
- Tests con xUnit: La calculadora de descuentos · La cuenta · El error en la nota media
- Hilos: Suma en paralelo · Descarga con un grupo · Un contador sin pérdidas
- Programación en red: Servidor de eco · Un servidor con comandos · Un chat para dos
- Bases de datos: Catálogo · Búsqueda por parte del nombre · Una transferencia que falla a medias
- Reflexión y atributos: Todas las propiedades · Mini JSON · Tu propio ejecutor de pruebas
Web y escritorio
- Listas, diccionarios y LINQ: Carrito · Almacén · Informe
- async y await: En secuencia y a la vez · Una petición rechazada
- Cómo funciona internet: Partes de una dirección · Qué significa el estado · Arma una petición
- Un servidor web con Minimal API: Qué hora es · Un catálogo con búsqueda · Un producto que no existe · Añadir un producto
- MVC: modelo, vista, controlador: Catálogo · Redirección después de guardar · Productos por categoría
- Vistas con Razor: Una tabla de productos · Un layout común con menú · Reservar una cata
- WebAPI: datos para otros programas
- Ventanas con WPF: Una cuenta con propina · Tareas del día · Un conversor de monedas
Hagamos un juego
- Cómo pensar un juego: Una carrera para dos · Adivina el número · ¿Quién ganó al tres en raya?
- RPG 1: los héroes: Un sexto héroe · La lista del grupo · ¿Quién es el más fuerte?
- RPG 2: la batalla: Un monstruo nuevo · Una poción curativa · Un informe de batalla
- RPG 3: el juego completo: Un menú · Progreso · Un jefe
- Epic Cosmos 1: los objetos en el espacio: El sistema solar · Distancia · El árbol completo
- Epic Cosmos 2: recursos, edificios, naves: 100 de metal lo más rápido posible · Una nave de carga · Una simulación de 10 turnos
- El laboratorio cerrado 1: salas y comandos: Inventario · Una sala nueva · Sinónimos
- El laboratorio cerrado 2: acertijos y la salida: El sótano oscuro · Un temporizador · Una pista por un movimiento
Las crónicas de Arcanum
- El bucle del juego
- Una pila de pantallas
- Pantallas que devuelven una respuesta
- Dibujar en la consola
- El mapa y el campo de visión
- Héroes, enemigos, atributos
- El sistema de combate
- Sangre, heridas y efectos
- Habilidades y acciones como comandos
- Enemigos que piensan
- Objetos, inventario, botín
- Niveles, diálogos y misiones
- Guardar y cargar
- El juego entero y el equilibrio
Epic Cosmos: el imperio
- La galaxia a partir de una semilla
- El árbol de tecnologías
- Las flotas y la batalla espacial
- Los rivales
- El turno de la galaxia
- La estrategia completa
Proyecto
- Reservas de hotel: Cambio de habitación