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:

EntradaSalida
7odd
10even

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

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 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 if independientes en vez de if/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;
}