抛硬币问题

Posted ccut-ry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抛硬币问题相关的知识,希望对你有一定的参考价值。

每次抛掷硬币正面向上和反面向上的概率是相同的

 

问题 1 :抛掷硬币 n 次,求连续 k 次正面向上的方案数有多少种 ?

  

  一个比较好想的点子是直接 2^n 枚举,在这其中寻找符合要求的有多少种,复杂度爆表...

  在计算连续 k 次正面向上的方案数可能并不太好算,那么就转换成 用总的方案数减去仅有连续小于 k 次的方案数

  dp[i] 表示 到第 i 个位置仅存在小于连续 k 次正面向上的方案数

  1 . 当 i < k 时, dp[i] = dp[i-1]*2

  2 . 当 i == k 时, dp[i] = 2^k-1;

  3 . 当 i > k 时, dp[i] = dp[i-1]*2 - dp[i-k-1];

代码示例 :

#define ll long long
const ll maxn = 1e6+5;
const ll mod = 1e9+7;

ll n, k;
ll dp[maxn];

void solve() {
    dp[0] = 1;
    ll res = 1;
    for(ll i = 1; i <= n; i++){
        if (i < k) dp[i] = dp[i-1]*2;
        else if (i == k) dp[i] = dp[i-1]*2-1;
        else dp[i] = dp[i-1]*2-dp[i-k-1];
        dp[i] %= mod;
        res *= 2; res %= mod;
    }
    ll ans = (res-dp[n]+mod)%mod;
    printf("%lld
", ans);
}

int main() { 
    while(~scanf("%lld%lld", &n, &k)){
        solve();
    }
    return 0;
}

 

问题  2 :

如果用抛硬币来举例子,则为假设有一个硬币,抛出背面和正面的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现三次正面为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出三次正面向上游戏就结束了,不用继续抛。

技术分享图片

 

以上是关于抛硬币问题的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 用计算机产生的伪随机数来模拟抛硬币试验。假设抛10次硬币,每次抛硬币得到正面和反面是随机的。抛10次硬币构成一个事件。调用随机(2)返回一个二值结果。在主程序中反复调用函数TossCoin

csu 1009 抛硬币

抛硬币问题

机器学习 | EM算法与你所不知道的抛硬币案例

Excel:在 n 次抛硬币中出现 h 个正面的概率

简单的抛硬币Java程序