Principiante · Bucles
Suma de 1 a N
Lee un entero N e imprime 1 + 2 + … + N. El clásico primer bucle for — con un atajo matemático escondido para más tarde.
En una fraseSuma de 1 a N con un for y un acumulador; la fórmula cerrada N(N+1)/2 da lo mismo en un paso, y con N ≤ 10.000 el resultado cabe en un int.
El problema
Entrada: un entero N (1 ≤ N ≤ 10.000).
Salida: la suma 1 + 2 + … + N.
Ejemplos:
| Entrada | Salida |
|---|---|
5 | 15 (1+2+3+4+5) |
Tu solución
Entrada personalizada para «Ejecutar mi entrada»
La corrección corre en tu navegador contra pruebas ocultas. Un bucle infinito se corta a los 3 segundos — aun así, asegúrate de que todo bucle tenga salida. Tu código se guarda solo mientras escribes.
¿Atascado? Pistas
Pista 1 — el patrón del acumulador
Necesitas una variable que empieza en 0 y crece: int sum = 0; y dentro del bucle sum += i;. Este patrón aparece en la mitad de los problemas para principiantes.
Pista 2 — los límites del bucle
for (int i = 1; i <= n; i++) — empieza en 1 (el 0 no suma nada) y termina en <= n (N incluido). El juez prueba exactamente estos bordes.
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
cout << sum << endl;
return 0;
}
El bucle lo resuelve en N pasos. El atajo famoso: n * (n + 1) / 2 da lo mismo en un paso (Gauss, con 9 años). Ojo: esa división es exacta — mira la división entera para ver por qué importa. Siguiente: El mayor de tres.
Análisis profundo
Por qué funciona
El acumulador (total += i) es la forma de bucle más reutilizada que existe. En cada problema la única pregunta real es qué va a la derecha del signo.
El coste
O(n) con el bucle; O(1) con la fórmula de Gauss n(n+1)/2. Para n = 10.000 son 10.000 sumas frente a tres operaciones.
Dónde falla
n * (n + 1) / 2desborda int hacia n = 65.000. Divide entre 2 primero o usalong long.- Empezar en
i = 0es inofensivo para una suma y fatal para un producto: iguala siempre el rango del enunciado.
Siguiente paso
Multiplicar en vez de sumar: Factorial.
Dos cosas para recordar
- Patrón acumulador: inicializar, recorrer, acumular, devolver.
- n(n+1)/2 convierte O(n) en O(1): la forma cerrada gana siempre.
🐞 Esta versión falla: ábrela y pruébala
i < n se come el último término
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int total = 0;
for (int i = 1; i < n; i++) total += i;
cout << total << endl;
return 0;
}