在一条无限长的跑道上,有N匹马在不同的位置上出发开始赛马。当开始赛马比赛后,
所有的马开始以自己的速度一直匀速前进。每匹马的速度都不一样,且全部是同样的均匀随机分布。
在比赛中当某匹马追上了前面的某匹马时,被追上的马就出局。 请问按以上的规则比赛无限长的时间后,
赛道上剩余的马匹数量的数学期望是多少
输入描述:
每个测试输入包含1个测试用例
输入只有一行,一个正整数N
1 <= N <= 1000
输出描述:
输出一个浮点数,精确到小数点后四位数字,表示剩余马匹数量的数学期望
输入例子:
1
2
输出例子:
1.0000
1.5000
算法分析:
考虑每个出发位置不出局的期望。最后一个出发的位置必然不出局,为1。
第一个位置不出局的概率为1/N,只能在速度最快的情况下不出局。
第i个位置不出局,只考虑前i匹马的排列,只要放在第i个位置上的速度最快,前i-1个随机排列,
概率为(i-1)!/i!=1/i。
所有的马开始以自己的速度一直匀速前进。每匹马的速度都不一样,且全部是同样的均匀随机分布。
在比赛中当某匹马追上了前面的某匹马时,被追上的马就出局。 请问按以上的规则比赛无限长的时间后,
赛道上剩余的马匹数量的数学期望是多少
输入描述:
每个测试输入包含1个测试用例
输入只有一行,一个正整数N
1 <= N <= 1000
输出描述:
输出一个浮点数,精确到小数点后四位数字,表示剩余马匹数量的数学期望
输入例子:
1
2
输出例子:
1.0000
1.5000
算法分析:
考虑每个出发位置不出局的期望。最后一个出发的位置必然不出局,为1。
第一个位置不出局的概率为1/N,只能在速度最快的情况下不出局。
第i个位置不出局,只考虑前i匹马的排列,只要放在第i个位置上的速度最快,前i-1个随机排列,
概率为(i-1)!/i!=1/i。
答案是1+1/2+1/3+...+1/N。
C++源代码:
#include#include using namespace std;int main(){int n, i;float E = 0;cin >> n;for (i = 1;i <= n;i++)E += (1.0 / i);cout << setiosflags(ios::fixed) << setprecision(4);cout << E << endl;return 0;}