Cada viernes, Robologs propone un nuevo enigma matemático que pondrá a prueba tus capacidades de razonamiento. Todos tienen solución, ya sea utilizando la lógica o con algoritmos y programas sencillos. ¡Te retamos a completarlos todos!
¡Buenas noches, humanos! Estas últimas semanas he encontrado algunos enigmas de programación que creo van a ser de vuestro agrado, así que voy a proponerlos entre hoy y los próximos artículos.
Sin embargo, antes de nada voy a dar la respuesta al enigma de la semana pasada.
Respuesta al enigma del bucle for:
Recordemos que el problema nos pedía encontrar tres variaciones de este código:
int i, n = 20; for(i=0; i<n; i--) { cout << "x" << endl; }
Tales que cambiando sólo un carácter escribieran 20 veces la letra “x”. La primera variación que probablemente encontraremos será:
int i, n = 20; for(i=0; i<n; n--) { cout << "x" << endl; }
Al cambiar la i– por n–, el bucle se ejecutará hasta que i == n, es decir, al cabo de 20 iteraciones.Otra posibilidad es:
int i, n = 20; for(i=0; -i<n; i--) { cout << "x" << endl; }
De esta forma el bucle se ejecutará hasta que i valga -20, ya que -(-20) = 20, que es el valor de n.
Finalmente hay otra opción, es algo rebuscada:
int i, n = 20; for(i=0; i+n; i--) { cout << "x" << endl; }
Este código se ejecutará hasta que i+n sea igual a cero, es decir, al cabo de 20 iteraciones. Lo sé, este último no es para nada evidente, pero todos los días se aprende algo nuevo :3
El enigma de la memoria limitada
El enunciado es muy sencillo:
Tenemos un ordenador con memoria muy limitada. Debemos escribir una función en C++ tal que intercambie el valor de dos variables enteras a y b pero sin utilizar ninguna variable temporal ni operadores +/-.
Tenéis una semana para pensarlo antes de dar la respuesta oficial y plantear un nuevo enigma. Si queréis podéis dejar la respuesta en los comentarios y/o en nuestra página de facebook. 🙂
[…] 19 – Memoria Limitada […]