这道编程题怎么做?高手的来啊!

来源:百度知道 编辑:UC知道 时间:2024/06/03 09:25:19
描述
在一个星期三的早上,某同学想用扔硬币的方式来决定是否要去上算法课。

他扔 n 次硬币,如果当中有连续 m 次以上(含 m 次)的结果都是正面,那么他就去上课,否则就接着睡觉。(假设每次扔硬币扔出的正反两面的概率都是 0.5。)

输入
输入的每行有一组数据,分别为 n 和 m (0 < n <= 2000, 0 < m <= 10)。输入以 0 0 结尾。

输出
对于每组数据,输出他去上课的概率,四舍五入保留小数点后 2 位。

样例输入
1 1
2 1
5 5
100 5
2000 5
2 3
0 0
样例输出
0.50
0.75
0.03
0.81
1.00
0.00

抛n次硬币所有的可能情况为2^n种

出现连续 m 次的可能情况为n-m+1种
出现连续m+1次的可能情况为n-m种
。。。
出现连续n次的可能情况为1种
因此出现连续 m 次以上的可能情况有
1+2+...+(n-m)+(n-m+1)=(n-m+2)(n-m+1)/2

那么概率为(n-m+2)(n-m+1)/(2^(n+1))
编程实现就行了