Knockout ist ein Basketballspiel, bei dem die Spieler abwechselnd schießen. Es wird als eine Folge von Zwei-Spieler-Wettbewerben gespielt, von denen jeder die Möglichkeit hat, einen dieser Spieler auszuschalten.
Angenommen, die Spieler sind A B C Dund ihre Chancen, einen Korb zu schießen und zu bilden 0.1 0.2 0.3 0.4, sind unabhängig vom anderen Spieler im Wettbewerb. Die beiden Spieler an der Spitze der Linie Aund B"kämpfen". Seitdem Aist er der Verteidiger , der in Gefahr ist, eliminiert zu werden, und er Bist der Angreifer und nicht in Gefahr, sofort eliminiert zu werden. Aschießt zuerst. Wenn es Aschafft, Ahat erfolgreich verteidigt und geht an den hinteren Rand der Linie. Die Zeile würde sich ändern zu B C D A. Wenn Aes nicht schafft, dann Bschießt. Wenn es Bschafft, Aist es raus und Bgeht zum Ende der Linie, so dass die Linie wird C D B. Wenn beides nichtAnoch Bschafft es, wiederholt sich der Vorgang mit erneutem ASchießen, bis entweder Aoder Bein Korb entsteht.
Angenommen, die Linie wurde geändert in B C D A(wurde Aerfolgreich verteidigt). Jetzt Bund C"kämpfe" damit B, der Verteidiger und Cder Angreifer zu sein. Dieser Vorgang wird wiederholt, bis nur noch eine Person übrig ist. Diese Person ist der Gewinner.
Ihre Aufgabe ist es, die Wahrscheinlichkeiten jeder gewinnenden Person zu berechnen, wenn die Chance besteht, dass sie einen Korb macht.
Eingabe :
Eine Liste von Zahlen, wie 0.1 0.2oder 0.5 0.5 0.5 0.5, wobei die n- te Zahl die Chance ist, dass der n- te Spieler einen Korb macht. Sie können diese Eingabe in einem beliebigen Format vornehmen, einschließlich als Parameter für eine Funktion.
Ausgabe :
Eine Liste von Zahlen, wobei die n- te Zahl die Chance ist, dass der n- te Spieler das Spiel gewinnt. Ihre Zahlen müssen in mindestens 90% der Fälle auf mindestens zwei Dezimalstellen genau sein. Dies bedeutet, dass Sie einen simulationsbasierten Ansatz verwenden können. Wenn Ihr Code jedoch nicht simulationsbasiert ist (es wird garantiert , dass eine korrekte Antwort auf mindestens 6 Dezimalstellen zurückgegeben wird), nehmen Sie 30% von Ihrer Punktzahl weg.
Beispiel zwischen 0.5 0.5: Rufen Sie die Spieler Aund B. Sei pdie Wahrscheinlichkeit, dass A gewinnt. Ahat eine 2/3Chance, erfolgreich zu verteidigen (da es eine 1/2Chance gibt, die Apunktet, eine 1/4Chance, die Averfehlt und Bpunktet, und eine 1/4Chance, die sowohl verfehlt als auch der Prozess wiederholt). Wenn er Anicht verteidigt, wird er ausgeschaltet und Bgewinnt. Wenn Averteidigt, wird die Linie B A. Da die Situation symmetrisch ist, die Wahrscheinlichkeit Aist zu gewinnen (1 - p). Wir bekommen:
p = 2/3 * (1 - p) + 1/3 * 0. Lösen bekommen wir p = 2/5. Die Ausgabe sollte 2/5 3/5oder sein 0.4 0.6.
Ich bin nicht gut genug mit der Wahrscheinlichkeit, komplexere Beispiele zu machen.
Wenn Sie weitere Testfälle benötigen, sind hier einige:
0.1 0.2 0.3 0.4 --> 0.01 0.12 0.25 0.62
0.99 0.99 --> 0.5 0.5 (it's not exact, but if you round to two decimal places, you get 0.5 and 0.5)