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:
| Entrada | Salida |
|---|---|
2 31 2 34 5 6 | 21 |
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;
}