Principiante · variables

Intercambiar dos números

Imprimir b y luego a no necesita intercambio — basta con dos cout en el otro orden. La versión interesante es intercambiarlos de verdad, y ahí es donde los principiantes pierden un valor.

En una fraseEscribe <code>b</code> y luego <code>a</code> en una línea. Si intercambias en variables, guarda antes un valor en un temporal.

El problema

Entrada: Dos enteros a y b (−1000 ≤ cada uno ≤ 1000), separados por un espacio.

Salida: b y luego a, separados por un solo espacio.

Ejemplos:

EntradaSalida
3 55 3
-1 77 -1

Dos estrategias igual de correctas: imprimir en el otro orden (una línea, sin cambiar estado) o intercambiar de verdad con un temporal (tres líneas, y el hábito que necesitarás para ordenar). Ambas pasan — enseñan cosas distintas.

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 — La respuesta más simple

cout << b << " " << a << endl; — listo. Nada en el programa necesita intercambiarse; solo importa el orden de salida. Reconocer cuándo el estado no debe cambiar es una habilidad real.

Pista 2 — Por qué un intercambio real necesita una tercera variable

Prueba a = b; b = a; y ambos acaban con el valor viejo de b — la primera asignación ya destruyó a. El temporal guarda el valor de a antes de que la primera asignación lo pise: int t = a; a = b; b = t;. El orden y el temporal son ambos estructurales.

Pista 3 — Un cin puede leer dos

cin >> a >> b; lee ambos valores en una sentencia, separando por espacios. Verás esta forma abreviada en todas partes — cin >> a; cin >> b; es idéntico pero más ruidoso.

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

int main() {
    int a, b;
    cin >> a >> b;

    int t = a;
    a = b;
    b = t;

    cout << a << " " << b << endl;
    return 0;
}

Ese intercambio de tres líneas es exactamente lo que Ordenamiento burbuja repite miles de veces, y lo que Fusionar intervalos debe hacer con cuidado entre dos arrays paralelos. Aprende el orden ahora y no te volverá a morder.

Análisis profundo

Por qué funciona

Si solo importa el orden de salida, escribir b y luego a está completo — no hay que cambiar estado. Si de verdad intercambias, la primera asignación destruye un valor, así que un temporal debe salvarlo: t = a; a = b; b = t;. El orden y el temporal son imprescindibles.

El coste

O(1) — una lectura y una línea de escritura, o tres asignaciones para un intercambio real.

Dónde falla

  • a = b; b = a; — ambas variables acaban con el valor viejo de b; el de a desaparece.
  • Intercambiar solo uno (a = b; y parar) — la salida muestra el mismo número dos veces.
  • Suponer que existe swap() — existe en <algorithm>, que este motor no ofrece. Tres líneas a mano siempre funcionan.

Siguiente paso

Las mismas tres líneas, repetidas en un bucle: Ordenamiento burbuja y Ordenar tres números.

Dos cosas para recordar

  • Un intercambio real son tres asignaciones; el temporal protege el valor que estás a punto de pisar.
  • Si solo importa el orden de salida, no intercambies: imprime en el otro orden.
🐞 Esta versión falla: ábrela y pruébala

a = b; b = a; — ambos acaban con el valor de b, a se pierde

#include <iostream>
using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    a = b;          // bug: a is overwritten before it is saved
    b = a;
    cout << a << " " << b << endl;
    return 0;
}