Principiante · lógica
¿Par o impar?
Par significa divisible entre 2, y «divisible entre 2» en código es n % 2 == 0. Esa única expresión es toda la prueba; el if elige qué palabra escribir.
En una fraseLee <code>n</code>; escribe <code>even</code> si <code>n % 2 == 0</code>, si no <code>odd</code>.
El problema
Entrada: Un entero n (−10000 ≤ n ≤ 10000).
Salida: even o odd — en minúsculas, exactamente esas palabras.
Ejemplos:
| Entrada | Salida |
|---|---|
7 | odd |
10 | even |
El rango incluye negativos a propósito: −4 también es par. Si tu prueba solo mira positivos, nunca notarás un bug de signo.
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 módulo da el resto
n % 2 es el resto tras dividir entre 2: 0 para pares, 1 (o −1 con negativos en C++) para impares. Comparar con == 0 es por tanto la prueba exacta de paridad — nunca hace falta mirar el signo.
Pista 2 — Un if, un else
Dos salidas significan un if (...) { ... } else { ... }. No escribas dos if separados — el segundo correría aunque el primero acertara y escribirías las dos palabras.
Pista 3 — Sin punto y coma tras la condición
if (n % 2 == 0); es un if completo con cuerpo vacío — la impresión siguiente pasa a ser incondicional. Es uno de los tres bugs principiantes más comunes en todo lenguaje que lo permite.
Solución (¡inténtalo primero!)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << "even" << endl;
} else {
cout << "odd" << endl;
}
return 0;
}
La misma prueba de módulo se convierte en un contador en Contar pares e impares — ahora sobre un array en vez de un número. Si la ramificación aún es nueva, la lección 3 del curso la recorre con un calculador de notas.
Análisis profundo
Por qué funciona
La divisibilidad entre 2 es exactamente n % 2 == 0, y también funciona con negativos: C++ da un resto cuyo signo sigue al dividendo, así que −4 % 2 es 0 y −3 % 2 es −1 — ninguno es cero salvo que el número sea genuinamente par. Una prueba cubre todo el rango.
El coste
O(1) — un módulo y una comparación.
Dónde falla
- Escribir
if (n % 2 == 1)para impar. Con negativos, −3 % 2 es −1, no 1 — la rama impar nunca se dispara. Prueba== 0, o usa!= 0. - Un punto y coma tras la condición (
if (n % 2 == 0);) deja el cuerpo vacío y la impresión incondicional. - Dos
ifindependientes en vez deif/else: se escriben las dos palabras.
Siguiente paso
La misma prueba, ahora contando sobre un array: Contar pares e impares.
Dos cosas para recordar
- Par =
n % 2 == 0; con negativos posibles, prueba cero, nunca uno. - Dos salidas necesitan un if/else, no dos if.
🐞 Esta versión falla: ábrela y pruébala
Prueba % 2 == 1: todo negativo se cuela como par
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 1) {
cout << "odd" << endl; // bug: never true for negatives
} else {
cout << "even" << endl;
}
return 0;
}