задачка из теорвера
Feb. 26th, 2025 10:00 pmТут участник
green_fr задал задачку:
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Есть колода карт со, скажем, тремя тузами. Мы вытаскиваем карту за картой; какова средняя ожидаемая длина последовательности до туза.
Я сначала было, забыв комбинаторику, понёс чушь. Потом понял, что это же чёрные и белые шары в коробке. Вот и программа тут внизу.
Но смешно другое. Иду я сегодня из магазина и вычисляю. И тут бац - на тротуаре и на дороге рядом разбросаны карты. Несколько лицами (или как их там) кверху. Ни одного туза. А одна карта рубашкой кверху, под машиной лежит. Перевернул. Туз червей.
import scala.language.implicitConversions
import scala.language.postfixOps
@main
def main(): Unit =
def fact(n: Int): BigInt = if (n < 2) 1 else (n * fact(n - 1))
class Cards(nCards: Int, nAces: Int):
val n = nCards-nAces
def `probability of first ace at`(k: Int) = {
val `probability of k-1 non-aces` =
(fact(n) * fact(nCards - k + 1)).toDouble / (fact(n-k+1) * fact(nCards)).toDouble
val `probability of k-th ace` = nAces.toDouble / (nCards-k) `probability of k-1 non-aces` * `probability of k-th ace`
} def `expected run` = (1 to n).map(i => i*`probability of first ace at`(i)).sum println(Cards(52,4).`expected run`)
>10.933092006033183