Wpis z mikrobloga

Zagadka: mając poniższy kod w C lub C++ i zakładając standardowy target x86 lub x64, odpowiedz, najlepiej bez kompilowania kodu, co powinna zwrócić funkcja f:

unsigned int m(unsigned short a, unsigned short b) {
return a * b;
}
unsigned int f() {
for(unsigned short x = 65535u; x>0; x--)
for(unsigned short y = 65535u; y>0; y--)
if (m(x,y) > 49999u*49999u) return x+y;
return 666;
}

#programowanie #zagadkaprogramistyczna #jezykc #cpp
  • 24
@Freedie: Wszystko się ładnie zagnieżdża, a pętle są po prawidłowych zakresach. Pominąłem klamerki, bo Wypok zżera wcięcia.
To nie jest taka trywialna zagadka ( ͡° ͜ʖ ͡°)
@smyl: No w sumie mógł być jeden for i m(x,x), no i mógł być for w drugą stronę, ale to nie zmieniałoby nic istotnego w tej zagadce. Rozumowanie prowadzące do odpowiedzi byłoby takie same.
@vytah: ale po co ten for? wystarczyłoby przecież

unsigned short x = 65535u;
unsigned short y = 65535u;
if (m(x,y) > 49999u*49999u) return x+y;
return 666;