Fácil–medio · Arrays 2D

Sumar una matriz

Lee una matriz filas x columnas e imprime la suma de todas sus entradas.

En una fraseLee filas y columnas y suma todas las entradas con un doble bucle: el bucle interno debe leer cols números por fila, no rows.

El problema

Entrada: Primera línea: filas y columnas. Luego las filas.

Salida: La suma de todas las entradas.

Ejemplo:

EntradaSalida
2 3
1 2 3
4 5 6
21

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 — No necesitas un array 2D

Para solo sumar, lee cada valor y súmalo; el array 2D solo hace falta si vuelves a las entradas.

Pista 2 — Bucles anidados por filas

for (i < rows) for (j < cols) { cin >> v; sum += v; } — la entrada llega por filas.

Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;

int main() {
    int rows, cols;
    cin >> rows >> cols;
    int sum = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            int v;
            cin >> v;
            sum += v;
        }
    }
    cout << sum << endl;
    return 0;
}

Retos: sumar solo la diagonal principal, o trasponer; ambos necesitan el array 2D.

Análisis profundo

Por qué funciona

Bucles anidados que igualan la forma del dato —filas × columnas— son el modelo mental de todo trabajo en dos dimensiones. C++ guarda por filas, así que el orden de los bucles tiene un coste real de caché.

El coste

O(r·c) de tiempo y O(1) de espacio extra si sumas mientras lees.

Dónde falla

  • Invertir los límites (columnas fuera, filas dentro) sigue siendo correcto pero recorre la memoria al revés: varias veces más lento en matrices grandes.
  • int m[100][100] en la pila son 40 KB. Tamaños mayores desbordan la pila en vez de fallar con elegancia.

Siguiente paso

Los patrones de una dimensión que ahora combinas: Máximo de un array.

Dos cosas para recordar

  • El orden de los bucles debe seguir el orden de la memoria (por filas).
  • Suma mientras lees: la matriz no hace falta.
🐞 Esta versión falla: ábrela y pruébala

i < rows - 1 se salta la última fila

#include <iostream>
using namespace std;

int main() {
    int rows, cols;
    cin >> rows >> cols;
    int sum = 0;
    for (int i = 0; i < rows - 1; i++) {
        for (int j = 0; j < cols; j++) {
            int v;
            cin >> v;
            sum += v;
        }
    }
    cout << sum << endl;
    return 0;
}