while sharp sacar resueltos repetir programacion numeros numero multiplos generar entre ejercicios ejemplos digitos completo como aleatorios aleatorio c#

sharp - multiplos de 5 c#



Calcula cuántas formas puedes agregar tres números para que sean 1000 (11)

El código no cubre los siguientes casos

  • 1000 + 0 + 0
  • 0 + 10000 + 0
  • 0 + 0 + 10000

El ciclo más interno debería ser un si más bien para .

No necesita {} si solo hay una instrucción en el bucle o cláusula if.

EDITAR: respuestas de código eliminadas

Necesito crear un programa que calcule cuántas formas puede agregar tres números para que sean 1000.

Creo que este código debería funcionar, pero no escribe nada. ¿Qué estoy haciendo mal? ¿Algún consejo o solución?

using System; namespace ConsoleApp02 { class Program { public static void Main(string[] args) { for(int a = 0; a < 1000; a++) { for(int b = 0; b < 1000; b++) { for(int c = 0; c < 1000; c++) { for(int puls = a + b + c; puls < 1000; puls++) { if(puls == 1000) { Console.WriteLine("{0} + {1} + {2} = 1000", a, b, c); } } } } } Console.ReadKey(true); } } }


En su ciclo interno final, "int puls = a + b + c; puls <1000; puls ++" garantiza que el puls nunca = 1000, si puls no es inferior a 1000, sale del ciclo. Es por eso que no obtienes valores. Pero reconsidera tu lógica también.


En una nota aparte, esta implementación particular, aunque funcionará (con las modificaciones sugeridas por las otras respuestas), es un gran éxito de rendimiento, ya que la complejidad de su algoritmo es O (n ^ 3). En otras palabras, estás atravesando el chequeo más interno mil veces.

Aquí hay una pista de cómo se puede optimizar al menos O (n ^ 2) o solo miliones de iteraciones: para cada par de ayb generado por los dos bucles for externos, solo hay un valor para c que dará como resultado 1000.


Ese código no dará respuesta.

El interior para el lazo agrega a + b + c y pone el resultado en puls. Sin embargo, detiene el ciclo antes de que puls pueda llegar a 1000, y luego prueba dentro de la instrucción for para ver si puls es igual a 1000. Por lo tanto, no obtendrá una respuesta.

Simplemente prueba el pulso contra 1000 en el circuito interno. ¿Por qué?


La pregunta no especifica que los números negativos no están permitidos. La respuesta es infinita.


No necesitas el lazo interno.

if (a+b+c == 1000) write


Puede reemplazar su bucle interno por solo con una prueba de si (a + b + c == 1000) {...}. Luego puede agregar optimizaciones como: una vez que se ha encontrado una suma con una combinación, no es necesario continuar con el ciclo interno.


Si obtiene esta tarea como estudiante de ciencias de la computación, probablemente quiera resolver esto usando la Programación Dinámica .


Su ciclo más interno (iterar la variable puls ) realmente no tiene sentido, y debido a la condición en él ( puls < 1000 ) Console.WriteLine nunca se ejecuta.

Tal vez debería probar si A + B + C es 1000, en su lugar.

Además, encontrará que puede faltar un par de combinaciones particulares de números debido a los límites en sus bucles (dependiendo de la declaración del problema).


Una vez que el bucle más interno llega a 1000, sale del bucle for y nunca comprueba si es 1000 en la instrucción ''if''.


Prueba esto:

{ for(a=0;a<=500;a++) { for (b=a;b<=500;b++) { c=1000-(a+b); count