To trzecia część mojej serii łamigłówek C / C ++; jeśli przegapiłeś pierwsze 2, są tutaj: (1) Programowanie puzzli m3ph1st0s 1 (C ++) (2) Programowanie puzzli m3ph1st0s 2 (C ++): „Zadzwoń mocno!”
Muszę powiedzieć, że moje puzzle są w 100% oryginalne. Jeśli nie, zawsze to stwierdzę w tekście. Moja trzecia łamigłówka składa się z 2 części:
Puzzle 3.1
Ta część (3.1) nie jest moją oryginalną łamigłówką, została zebrana z jakiejś strony internetowej, którą czytałem jakiś czas temu. Używam go tutaj jako punktu wyjścia i rozgrzewki dla ciebie. Rozwiąż ten problem, a następnie przejdź do drugiej części.
Ktoś próbował wydrukować znak „+” 20 razy i wymyślił następujący program:
#include <stdio.h>
int main() {
int i;
int n = 20;
for( i = 0; i < n; i-- )
printf("+");
return 0;
}
Fakt, że nie przyniósł oczekiwanego rezultatu, jest oczywisty - program nigdy się nie kończy. Napraw to! Łatwy? Teraz napraw program, zmieniając TYLKO JEDEN ZNAK - oczywiście spacja! Dla tego wyzwania istnieją 3 rozwiązania. Znajdź wszystkie 3 z nich. Żeby było jasne: program musi wygenerować 20 znaków „+” i musi zakończyć się szybko. Zanim skrytykuję mnie, co oznacza „szybki”, powiem, że oznacza to najwyżej kilka sekund (co, nawiasem mówiąc, to za dużo, ale po prostu, żeby było jasne).
Puzzle 3.2
ZMIENIONO Wskazano mi wcześniej, że rozwiązanie łamigłówki 3.2.2 może zależeć od kompilatora. Aby wyeliminować wszelkie możliwe dyskusje na ten temat, zmodyfikuję ten pomysł i poprawię go na następnej łamigłówce, kiedy dołożę wszelkich starań, aby nie wywoływać kontrowersji. Jednak, aby utrzymać tę łamigłówkę, zrobię małą modyfikację do 3.2.2 (rozwiązanie będzie łatwiejsze, ale czystsze).
Kiedy po raz pierwszy zobaczyłem układankę, okazało się, że jest całkiem niesamowita. Udało mi się go rozwiązać, ale nie od razu, ponieważ wymaga to starannej uwagi. Jeśli tu jesteś, oznacza to, że ty też go rozwiązałeś. Jeśli to zrobiłeś, pisząc program, który zastąpi wszystkie możliwe znaki wszystkimi możliwymi wartościami i przetestujesz każde rozwiązanie, jesteś zgubiony. Ale ciężko pracujący facet. Po poprawieniu programu, który zapisuje 20 znaków „+”:
3.2.1: Wstaw jedną pojedynczą literę i nic więcej do kodu, aby wynik był prawidłowy i wyświetlał to samo we wszystkich 3 poprawionych programach. Nie trzeba dodawać, że list musi znajdować się przed załącznikiem} main (mówię to, ponieważ nie chcę słyszeć ludzi, którzy po prostu napisali list po programie i jakoś ich kompilator był bardzo przyjazny).
EDYTOWANE (patrz poniżej) - w przypadku tych ostatnich pytań należy wziąć pod uwagę, że licznik i zaczyna się od -1 zamiast 0.
3.2.1.5: Powtórz wszystkie poprzednie problemy z warunkiem, że wyjście ma co najmniej 19 znaków „+” (ale nadal jest wyjściem skończonym). Zmiana spacji jest dozwolona. Teraz mogłeś znaleźć więcej rozwiązań niż w pierwszym przypadku. Niektóre z nich z pewnością będą pasować do pytania 3.2.2.
3.2.2: Wybierz inną wartość, aby zainicjować zmienną n, tak aby wynikowy wynik pozostał taki sam dla co najmniej jednego poprawionego programu w 3.2.1.5 (niekoniecznie dla wszystkich).
OSTATNIA EDYCJA 1 : zmiana programu tak, aby wyświetlał 21 znaków „+”, jest nadal dobrym rozwiązaniem, ponieważ oryginalny tekst nie zawierał „dokładnie” 20 znaków. Jednak nieskończona moc wyjściowa jest zabroniona. Oczywiście nie oznacza to, że zacznijmy wypisywać setki znaków „+”, ponieważ nie jest to zabronione. Ale wyeliminowanie pięknego wyniku 21 nie byłoby w duchu tej konkurencji.
LAST EDIT2 : biorąc pod uwagę LAST EDIT1 i zaakceptowanie zmiany przestrzeni wydaje się, że teraz mamy 5 możliwych rozwiązań, z których cztery zostały już wskazane w odpowiedziach. Ostatnie wyzwanie nie zostało jednak dotknięte i muszę jeszcze raz wyjaśnić: n należy przypisać inną wartość , rozwiązania, które przypisują 20 do n przez niektóre lewy, nie zrobią tego (np. N = 20L). Wolę też zobaczyć trzecie rozwiązanie, które nie zmienia spacji.
LAST EDIT3 : Zredagowałem ostatnie pytania, proszę przeczytać!
Wyzwanie polega na rozwiązaniu obu części układanki. Wygrywa ten, kto pierwszy to zrobi.
Mam nadzieję, że wszystko będzie jasne, jeśli nie, proszę o zadawanie pytań, a ja dokonam edycji tak szybko, jak to możliwe. Twoje zdrowie. podkreślony tekst