Questo è il terzo della mia serie di puzzle C / C ++; nel caso in cui tu abbia perso i primi 2 sono qui: (1) puzzle di programmazione 1 (C ++ ) di m3ph1st0s (C ++) (2) puzzle di programmazione 2 (C ++) di m3ph1st0s: "Chiama duro!"
Devo dire che i miei puzzle sono originali al 100%. In caso contrario, lo indicherò sempre nel testo. Il mio terzo puzzle ha 2 parti come segue:
Puzzle 3.1
Questa parte (3.1) non è un mio enigma originale, è raccolta da una pagina Internet che ho letto qualche tempo fa. Lo uso qui come punto di partenza e riscaldamento per te. Risolvi questo e poi passa alla seconda parte.
Qualcuno ha provato a stampare il segno "+" 20 volte e ha escogitato il seguente programma:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
Il fatto che non abbia avuto il risultato atteso è ovvio: il programma non finisce mai. Aggiustalo! Facile? Ora correggi il programma cambiando SOLO UN PERSONAGGIO - personaggio non spaziale ovviamente! Per questa sfida ci sono 3 soluzioni. Trova tutti e 3. Giusto per chiarire: il programma deve generare 20 "+" segni e deve finire velocemente. Prima di criticarmi su cosa significhi "veloce", dirò che significa al massimo un paio di secondi (che tra l'altro è troppo ma solo per renderlo cristallino).
Puzzle 3.2
EDITED In precedenza mi è stato fatto notare che la soluzione per il puzzle 3.2.2 potrebbe essere dipendente dal compilatore. Al fine di eliminare ogni possibile discussione sull'argomento, modificherò l'idea e la migliorerò nel prossimo enigma quando mi prenderò cura di non generare polemiche. Tuttavia, per continuare questo puzzle, farò una piccola modifica per 3.2.2 (la soluzione sarà più semplice ma più pulita).
Quando ho visto il puzzle per la prima volta l'ho trovato davvero fantastico. Sono riuscito a risolverlo ma non immediatamente poiché richiede un'attenta attenzione. Se sei qui significa che anche tu l'hai risolto. Se lo hai fatto scrivendo un programma per sostituire tutti i possibili caratteri con tutti i possibili valori e testare ogni soluzione, ti perdi. Duro lavoratore però. Ora dopo aver corretto il programma che scrive 20 segni "+":
3.2.1: Inserire una sola lettera e nient'altro nel codice in modo che il risultato sia valido e produca la stessa cosa in tutti e 3 i programmi corretti. Inutile dire che la lettera deve essere prima del racchiudere} di main (lo dico perché non voglio sentire le persone che hanno appena messo una lettera dopo il programma e in qualche modo il loro compilatore è stato molto amichevole).
EDITED (vedi sotto) - Per queste ultime domande considera che il contatore i inizia da -1 invece di 0.
3.2.1.5: Ripetere tutti i precedenti problemi con la condizione che l'output sia almeno 19 "+" segni (ma comunque un output finito). È consentito cambiare spazio. Ora potresti aver trovato più soluzioni rispetto al primo caso. Alcuni di questi si adatteranno sicuramente alla domanda 3.2.2.
3.2.2: Scegliere un altro valore per inizializzare la variabile n in modo che l'output risultante rimanga lo stesso per almeno un programma corretto in 3.2.1.5 (non necessariamente per tutti).
LAST EDIT1 : cambiare il programma in modo che emetta 21 "+" segni è ancora una buona soluzione, in quanto il testo originale non diceva "esattamente" 20 segni. Tuttavia, l'uscita infinita è vietata. Ovviamente questo non significa che iniziamo tutti a emettere centinaia di segni "+" poiché non è vietato. Ma eliminare una bella uscita 21 non sarebbe nello spirito di questa competizione.
LAST EDIT2 : considerando LAST EDIT1 e accettare il cambio di spazio sembra che ora abbiamo 5 possibili soluzioni, quattro delle quali sono già state evidenziate nelle risposte. L'ultima sfida tuttavia non è stata toccata e devo chiarire ancora una volta: n deve essere assegnato un altro valore , le soluzioni che assegnano 20 a n con alcuni trucchi non lo faranno (come n = 20L). Inoltre preferisco vedere la terza soluzione che non cambia gli spazi.
LAST EDIT3 : ho modificato le ultime domande, per favore leggi!
La sfida è risolvere entrambe le parti del puzzle. Il primo a farlo vince.
Spero che sia tutto chiaro, in caso contrario per favore pubblica tutte le domande e le modificherò il più rapidamente possibile. Saluti. testo enfatizzato