Fácil–medio · Arrays

Contar pares e impares

Lee N números y reporta cuántos son pares y cuántos impares. Dos contadores marchando en un mismo bucle — más un matiz con los negativos que el juez encantado probará.

En una fraseCuenta pares e impares con dos contadores e imprime "even: E" y "odd: O"; para un impar negativo n % 2 es −1, así que compara con 0 y no con 1.

El problema

Entrada: la primera línea trae N (1 ≤ N ≤ 1000); la segunda, N enteros (pueden ser negativos o cero).

Salida: dos líneas: even: E y luego odd: O.

Ejemplos:

Ejemplo:

Entrada:            Salida:
5                   even: 2
1 2 3 4 5           odd: 3

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 — contadores en paralelo

Ambos en 0 y, dentro del bucle: if (a % 2 == 0) even++; else odd++;. No hace falta array — como en Máximo de un array, puedes procesar los valores según llegan.

Pista 2 — ¿−3 es impar? ¿y el 0?

-3 % 2 es -1 (el resto hereda el signo del dividendo — ver división entera), así que compara con == 0, nunca con == 1: -3 % 2 == 1 es falso y clasificaría mal los negativos. Y el 0 es par — 0 % 2 == 0 se cumple.

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

int main() {
    int n;
    cin >> n;
    int even = 0, odd = 0;
    for (int i = 0; i < n; i++) {
        int a;
        cin >> a;
        if (a % 2 == 0) even++;
        else odd++;
    }
    cout << "even: " << even << endl;
    cout << "odd: " << odd << endl;
    return 0;
}

El patrón contadores-en-un-bucle generaliza a todo problema de clasificación: contar positivos, notas sobre 80, palabras por longitud. Buen reto: contar cuántas veces aparece cada dígito final 0–9 (diez contadores — o un array de diez contadores, que es la puerta a ideas más grandes).

Análisis profundo

Por qué funciona

Dos contadores independientes en una sola pasada demuestran que lo normal es obtener varias estadísticas en un recorrido. Rara vez necesitas dos bucles.

El coste

O(n) de tiempo y O(1) de espacio: una pasada llena los dos contadores.

Dónde falla

  • n % 2 == 1 es falso para los impares negativos: -3 % 2 vale -1. Comprueba n % 2 != 0.
  • Reiniciar un contador dentro del bucle tira todo lo anterior a la última vuelta.

Siguiente paso

Cubos en vez de dos contadores: Frecuencia de dígitos.

Dos cosas para recordar

  • En C++, -3 % 2 == -1: compara != 0, no == 1.
  • Una pasada puede llenar muchos contadores.
🐞 Esta versión falla: ábrela y pruébala

n % 2 == 1 falla con los impares negativos

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int even = 0, odd = 0;
    for (int i = 0; i < n; i++) {
        int v;
        cin >> v;
        if (v % 2 == 0) even++;
        else if (v % 2 == 1) odd++;
    }
    cout << "even: " << even << endl;
    cout << "odd: " << odd << endl;
    return 0;
}