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 D
und 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 A
und B
"kämpfen". Seitdem A
ist er der Verteidiger , der in Gefahr ist, eliminiert zu werden, und er B
ist der Angreifer und nicht in Gefahr, sofort eliminiert zu werden. A
schießt zuerst. Wenn es A
schafft, A
hat erfolgreich verteidigt und geht an den hinteren Rand der Linie. Die Zeile würde sich ändern zu B C D A
. Wenn A
es nicht schafft, dann B
schießt. Wenn es B
schafft, A
ist es raus und B
geht zum Ende der Linie, so dass die Linie wird C D B
. Wenn beides nichtA
noch B
schafft es, wiederholt sich der Vorgang mit erneutem A
Schießen, bis entweder A
oder B
ein Korb entsteht.
Angenommen, die Linie wurde geändert in B C D A
(wurde A
erfolgreich verteidigt). Jetzt B
und C
"kämpfe" damit B
, der Verteidiger und C
der 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.2
oder 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 A
und B
. Sei p
die Wahrscheinlichkeit, dass A gewinnt. A
hat eine 2/3
Chance, erfolgreich zu verteidigen (da es eine 1/2
Chance gibt, die A
punktet, eine 1/4
Chance, die A
verfehlt und B
punktet, und eine 1/4
Chance, die sowohl verfehlt als auch der Prozess wiederholt). Wenn er A
nicht verteidigt, wird er ausgeschaltet und B
gewinnt. Wenn A
verteidigt, wird die Linie B A
. Da die Situation symmetrisch ist, die Wahrscheinlichkeit A
ist 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/5
oder 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)