题面:有一个游戏,玩法如下:一个方块一开始放置在原点,每次投掷一个均匀的六面骰子,掷出几点,将方块往前移动几点;问:当游戏一直进行下去,方块曾经落在2019的概率为?
牛客网上看到的水题
1.首先,走到1只有一种情况,就是第一次扔了1,所以其概率为1/6
2.走到2有两种情况:
1.直接扔了个2
2.第一次扔了个1,第二次又扔了个1
所以走到2的概率为1/6+1/6*1/6等于7/36
3.走到3就有3三种情况:直接扔了3;从1扔了个2过来;从2扔了个1过来,以此类推
这样我们可以算出1-6的概率
对于那些大于6的,打个比方,到2008的概率,它只有6种情况:从2007扔个1过来,2006扔个2过来...
于是它的概率就是分别用1/6乘以走到2007、2006的概率
这样递推式就建立起来了,最后输出2019的概率就可以了
代码:
#include<iostream> #include<cstring> using namespace std; int main() { const double six=(double)1/6; double a[2200]; memset(a,0,sizeof(a)); a[1]=six; for(int i=2;i<=6;i++) { a[i]=six; for(int j=1;j<=6;j++) { if(i-j) a[i]+=a[i-j]*six; } } for(int i=7;i<=2019;i++) { for(int j=1;j<=6;j++) { a[i]+=a[i-j]*six; } } cout<<a[2019]<<endl; }
最后输出的答案是:0.285714 也就是2/7
所以答案选D
当然概率论大神也可以直接手算 这个我就不会啦
有一个游戏,玩法如下:一个方块一开始放置在原点,每次投掷一个均匀的六面骰子,掷出几点,将方块往前移动几点;问:当游戏一直进行下去,方块曾经落在2019的概率为?
原文:https://www.cnblogs.com/EdwardZhang/p/10627406.html