Ihre Herausforderung:
Sie befinden sich im 0. Stock eines unendlich hohen Gebäudes. Auf jeder Etage können Sie zum Fenster gehen und ein Ei fallen lassen. Ihr Ziel ist es, den höchsten Stock herauszufinden, dem das Ei standhalten kann, ohne zu brechen. Sie haben jedoch maximal 3 Eier, um dies herauszufinden, aber Sie müssen die Anzahl der Versuche minimieren.
In formalen Begriffen:
- Sie erhalten eine Funktion,
f(n)
diebool(n <= X)
für ein Unbekanntes zurückgibtX
, wobei0 <= X
- Sie müssen den Wert von zurückgeben
X
(ohne direkt darauf zuzugreifen). f(n)
darf nurFalse
maximal3
oft zurückgegeben werden (in einem einzelnen Testfall). Wenn esFalse
mehr als das zurückgibt , wird Ihre Antwort disqualifiziert.
Beschränkungen
Ihre Punktzahl ist die Gesamtzahl der Anrufe, die Sie tätigen f(n)
(in den folgenden Testfällen).
Wenn Sie möchten, können Sie auf die Übergabe einer Funktion verzichten und die oben genannte Situation einfach "simulieren". Jedoch , Ihr Lösungsalgorithmus muss wissen nichts von X
.
Ihr Algorithmus sollte die Testfälle nicht oder maximal hart codieren X
. Wenn ich die Zahlen neu generieren oder weitere hinzufügen sollte, sollte Ihr Programm in der Lage sein, mit ihnen umzugehen (mit einer ähnlichen Punktzahl).
Wenn Ihre Sprache keine Ganzzahlen mit beliebiger Genauigkeit unterstützt, können Sie den long
Datentyp verwenden. Wenn Ihre Sprache auch nicht unterstützt, haben Sie kein Glück.
Der n-te Testfall wird wie folgt generiert :
g(n) = max(g(n-1)*random(1,1.5), n+1), g(0) = 0
oder ungefähr 1.25^n
Testfälle:
0,1,2,3,4,6,7,8,10,14,15,18,20,27,29,40,57,61,91,104,133,194,233,308,425,530,735,1057,1308,1874,2576,3162,3769,3804,4872,6309,7731,11167,11476,15223,15603,16034,22761,29204,35268,42481,56238,68723,83062,95681,113965,152145,202644,287964,335302,376279,466202,475558,666030,743517,782403,903170,1078242,1435682,1856036,2373214,3283373,4545125,6215594,7309899,7848365,8096538,10409246,15103057,20271921,22186329,23602446,32341327,33354300,46852754,65157555,93637992,107681394,152487773,181996529,225801707,324194358,435824227,579337939,600264328,827690923,1129093889,1260597310,1473972478,1952345052,1977336057,2512749509,3278750235,3747691805,5146052509
Dies ist eine Code-Herausforderung , und die Person mit der niedrigsten Punktzahl gewinnt!