Este es el tercero de mi serie de rompecabezas C / C ++; en caso de que te hayas perdido los primeros 2 están aquí: (1) rompecabezas de programación de m3ph1st0s 1 (C ++) (2) rompecabezas de programación de m3ph1st0s 2 (C ++): "¡Llama duro!"
Debo decir que mis rompecabezas son 100% originales. Si no, siempre lo diré en el texto. Mi tercer rompecabezas tiene 2 partes de la siguiente manera:
Puzzle 3.1
Esta parte (3.1) no es un rompecabezas original mío, está recopilada de alguna página de Internet que he leído hace un tiempo. Lo uso aquí como punto de partida y un calentamiento para ti. Resuelve este y luego pasa a la segunda parte.
Alguien intentó imprimir el signo "+" 20 veces y se le ocurrió el siguiente programa:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
El hecho de que no tuvo el resultado esperado es obvio: el programa nunca termina. ¡Arreglalo! ¿Fácil? Ahora arregle el programa cambiando SÓLO UN CARÁCTER - ¡un personaje que no sea espacial, por supuesto! Para este desafío hay 3 soluciones. Encuentra los 3 de ellos. Solo para dejarlo claro: el programa debe generar 20 signos "+" y debe terminar rápidamente. Antes de criticarme por lo que significa "rápido", diré que significa como máximo un par de segundos (que por cierto es demasiado, pero solo para que quede claro como el cristal).
Puzzle 3.2
EDITADO Se me señaló anteriormente que la solución para el rompecabezas 3.2.2 podría depender del compilador. Para eliminar cualquier posible discusión sobre el tema, modificaré la idea y la mejoraré en el próximo acertijo cuando tenga mucho cuidado de no generar controversia. Sin embargo, para mantener este rompecabezas, haré una pequeña modificación para 3.2.2 (la solución será más fácil pero más limpia).
Cuando vi el rompecabezas por primera vez, lo encontré increíble. Logré resolverlo, pero no de inmediato, ya que requiere una atención cuidadosa. Si estás aquí significa que tú también lo resolviste. Si lo hizo escribiendo un programa para reemplazar todos los caracteres posibles con todos los valores posibles y probar cada solución, está perdido. Trabajador duro sin embargo. Ahora que ha corregido el programa que escribe 20 signos "+":
3.2.1: Inserte una sola letra y nada más en el código para que el resultado sea válido y genere lo mismo en los 3 programas corregidos. No hace falta decir que la carta debe estar antes del adjunto} de main (lo digo porque no quiero escuchar a las personas que simplemente pusieron una carta después del programa y de alguna manera su compilador fue muy amigable).
EDITADO (ver más abajo): para estas preguntas finales, considere que el contador i comienza desde -1 en lugar de 0.
3.2.1.5: Repita todos los problemas anteriores con la condición de que la salida tenga al menos 19 signos "+" (pero aún una salida finita). Se permite cambiar espacios. Ahora puede haber encontrado más soluciones que en el primer caso. Algunos de estos encajarán definitivamente para la pregunta 3.2.2.
3.2.2: Elija otro valor para inicializar la variable n para que la salida resultante permanezca igual para al menos uno de los programas corregidos en 3.2.1.5 (no necesariamente para todos ellos).
ÚLTIMA EDICIÓN1 : cambiar el programa para que muestre 21 signos "+" sigue siendo una buena solución, ya que el texto original no decía 20 signos "exactamente". Sin embargo, la salida infinita está prohibida. Obviamente, esto no significa que todos comencemos a generar cientos de signos "+", ya que no está prohibido. Pero eliminar una hermosa salida 21 no estaría en el espíritu de esta competencia.
LAST EDIT2 : considerando LAST EDIT1 y aceptando el cambio de espacio , parece que ahora tenemos 5 posibles soluciones, cuatro de las cuales ya se han señalado en las respuestas. Sin embargo, el último desafío no se ha tocado y debo dejarlo claro una vez más: a n se le debe asignar otro valor , las soluciones que asignan 20 an por algunos trucos no lo harán (como n = 20L). También prefiero ver la tercera solución que no cambia espacios.
ÚLTIMA EDICIÓN3 : ¡He editado las últimas preguntas, por favor lea!
El desafío es resolver ambas partes del rompecabezas. El primero en hacerlo gana.
Espero que todo esté claro, si no, publique cualquier pregunta y la editaré lo más rápido posible. Salud. texto enfatizado