Este é o terceiro da minha série de quebra-cabeças C / C ++; caso você tenha perdido os dois primeiros, eles estão aqui: (1) quebra-cabeça de programação do m3ph1st0s 1 (C ++) (2) quebra-cabeça de programação do m3ph1st0s 2 (C ++): "Call hard!"
Devo dizer que meus quebra-cabeças são 100% originais. Caso contrário, sempre o declararei no texto. Meu terceiro quebra-cabeça tem 2 partes, da seguinte maneira:
Puzzle 3.1
Esta parte (3.1) não é um quebra-cabeça original, é coletada em alguma página da Internet que li há algum tempo. Eu o uso aqui como ponto de partida e um aquecimento para você. Resolva este e depois passe para a 2ª parte.
Alguém tentou imprimir o sinal "+" 20 vezes e criou o seguinte programa:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
O fato de não ter o resultado esperado é óbvio - o programa nunca termina. Consertá-lo! Fácil? Agora corrija o programa alterando SOMENTE UM CARÁTER - é claro que não é um espaço! Para este desafio, existem 3 soluções. Encontre todos os 3 deles. Apenas para esclarecer: o programa deve emitir sinais de 20 "+" e deve terminar rapidamente. Antes de me criticar sobre o que significa "rápido", direi que isso significa no máximo alguns segundos (que, a propósito, é demais, mas apenas para deixar claro).
Puzzle 3.2
EDITADO Mencionou -me anteriormente que a solução para o quebra-cabeça 3.2.2 pode ser dependente do compilador. Para eliminar qualquer possível discussão sobre o assunto, modificarei a idéia e a melhorarei em um próximo quebra-cabeça, quando tomarei cuidado extra para não gerar controvérsia. No entanto, para manter esse quebra-cabeça, farei uma pequena modificação no 3.2.2 (a solução será mais fácil, mas mais limpa).
Quando vi o quebra-cabeça pela primeira vez, achei incrível. Consegui resolvê-lo, mas não imediatamente, pois requer atenção cuidadosa. Se você está aqui, significa que você também resolveu. Se você fez isso escrevendo um programa para substituir todos os caracteres possíveis por todos os valores possíveis e testar todas as soluções, estará perdido. Cara que trabalha duro embora. Agora, tendo corrigido o programa que escreve sinais de 20 "+":
3.2.1: Insira uma única letra e nada mais no código para que o resultado seja válido e produza a mesma coisa nos 3 programas corrigidos. Escusado será dizer que a carta deve estar antes do anexo} do main (digo isso porque não quero ouvir pessoas que acabaram de escrever uma carta após o programa e de alguma forma o compilador foi muito amigável).
EDITADO (veja abaixo) - Para estas questões finais, considere que o contador i começa em -1 em vez de 0.
3.2.1.5: Repita todos os problemas anteriores com a condição de que a saída tenha pelo menos 19 "+" sinais (mas ainda seja uma saída finita). Mudar de espaço é permitido. Agora você pode ter encontrado mais soluções do que no primeiro caso. Alguns deles definitivamente se encaixam na pergunta 3.2.2.
3.2.2: Escolha outro valor para inicializar a variável n, para que a saída resultante permaneça a mesma para pelo menos um programa corrigido no 3.2.1.5 (não necessariamente para todos eles).
ÚLTIMA EDIÇÃO1 : alterar o programa para gerar 21 sinais "+" ainda é uma boa solução, pois o texto original não dizia "exatamente" 20 sinais. No entanto, a saída infinita é proibida. Obviamente, isso não significa que vamos começar a emitir centenas de sinais "+", pois não é proibido. Mas eliminar uma bela produção de 21 não estaria no espírito dessa competição.
ÚLTIMA EDIÇÃO2 : considerando a ÚLTIMA EDIÇÃO1 e aceitando a mudança de espaço , parece que agora temos 5 soluções possíveis, quatro das quais já foram apontadas nas respostas. O último desafio, no entanto, não foi abordado e devo deixar claro mais uma vez: n deve receber outro valor , soluções que atribuem 20 a n por alguns truques não o farão (como n = 20L). Também prefiro ver a terceira solução que não altera os espaços.
ÚLTIMA EDIÇÃO3 : Editei as últimas perguntas, por favor leia!
O desafio é resolver as duas partes do quebra-cabeça. O primeiro a fazê-lo vence.
Espero que esteja claro, se não, por favor, poste alguma dúvida e editarei o mais rápido possível. Felicidades. texto enfatizado