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 nurFalsemaximal3oft zurückgegeben werden (in einem einzelnen Testfall). Wenn esFalsemehr 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 longDatentyp 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) = 0oder 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!