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:

EntradaSalida
515 (1+2+3+4+5)

Tu solución

main.cpp — 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) / 2 desborda int hacia n = 65.000. Divide entre 2 primero o usa long long.
  • Empezar en i = 0 es 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;
}