To pierwsza z serii łamigłówek C ++ dla Ciebie. Mam nadzieję, że ci się spodoba.
Tak więc zagadka nr 1:
Biorąc pod uwagę następujący program:
#include <iostream>
int main()
{
const int a=1;
const int b=2;
const float c=0.5;
std::cout << a/b-a*c;
}
Wstaw trochę kodu w jednym nowym wierszu w dowolnym miejscu w programie, tak aby wynik wynosił 0. Nowy wiersz będzie zawierać AT MOST 18 znaków (łącznie ze spacjami), a reszta wierszy pozostanie niezmodyfikowana. Dla jasności, oto przykład prawidłowego nowego kodu:
#include <iostream>
int main()
{
const int a=1;
const int b=2;
int* p = NULL;
const float c=0.5;
std::cout << a/b-a*c;
}
Wstawiono nowy wiersz z 15 znakami, więc jest w porządku. Jednak to nie rozwiązuje problemu.
Jeśli jest to dla ciebie zbyt proste, nie martw się, nadchodzi więcej !!
code-challenge
programming-puzzle
Bogdan Alexandru
źródło
źródło
Odpowiedzi:
powinien również działać i ma tę samą długość.
źródło
#define int float
jest faktycznie niezdefiniowanym zachowaniem. Nie wolno nadawać słowom kluczowym nowego znaczenia.#define int ERROR
się do użycia ekwiwalentuint32_t
zamiast wbudowanych typów. Zanim doszedłem doint main()
, zapomniałem o makrze i zastanawiałem się, dlaczego mój kod się nie skompiluje.Możemy pozbyć się a = 1, przenosząc go do innego zakresu:
To chyba 13 znaków. Lub jeszcze lepiej uzyskaj nowy,
a
który również spowoduje 0:To 11 znaków
źródło
1 nowa linia, 12 nowych znaków
źródło
Tak więc
#define a 0
, Gotowe. Widziałem, że został opublikowany - nic dziwnego.Zaskakujące, że nie zostało to opublikowane:
14 znaków
To powinno wystarczyć, prawda?
źródło
17 znaków.
Nawiasem mówiąc, oryginalny program nie kompiluje się pod MSVC, który narzeka, że
main
nie ma typu zwrotu.źródło
18, w tym nowa linia
źródło
float
jest słowem kluczowym).15 znaków.
źródło
14 znaków.
źródło
17 znaków.
źródło
Ma 17 znaków, więc po prostu pasuje.
źródło
Nie znam C ++, jednak w oparciu o pytanie, czy nie możesz po prostu wpisać wiersza, aby po prostu wyzerować 0? pytanie określa, że wyjście powinno wynosić 0, nie określa, że ZMIEŃ wyjście na 0.
(Mam 0 wskazówek na temat C ++, być może ktoś może skorzystać z tej koncepcji)
źródło
12 znaków, podobne do rozwiązania moba
działają również inne kombinacje, takie jak
#define a c
lub#define c 0
źródło
Wiem, że to nie jest golf golfowy , ale wydaje mi się, że mam dziś na sobie ten kapelusz!
--za;
pięć znaków, w tym nowa linia;
źródło
a
jestconst
.c ++ cokolwiek ...
uruchomić przez:
źródło
Wariant odpowiedzi pana Listera, ale nieco mniej oczywisty.
źródło
Co powiesz na te 11 znaków ...
źródło
int a
przedif
inicjowaniem nie inicjuje się, więca
może mieć dowolną wartość.a
.http://codepad.org/N06weGJc
źródło