题目:飞机座位分配概率
题目描述:有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。
剩下的乘客将会:
如果他们自己的座位还空着,就坐到自己的座位上,
当他们自己的座位被占用时,随机选择其他座位
第 n 位乘客坐在自己的座位上的概率是多少?
示例 1:
输入:n = 1
输出:1.00000
解释:第一个人只会坐在自己的位置上。
示例 2:
输入: n = 2
输出: 0.50000
解释:在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。
public class NthPersonGetsNthSeat {
public static void main(String[] args) {
int n = 12;
System.out.println(nthPersonGetsNthSeat(n));
}
public static double nthPersonGetsNthSeat(int n) {
//创建一个dp数组,无需0下标
double [] dp = new double[n+1];
//只有一个人时,坐在自己位置的概率
dp[1] = 1.0;
for(int i =2 ;i<=n;i++){
dp[i] = 1.0/i +(i-2)*1.0/i*dp[i-1];
}
//返回n个人时,第n个人坐在自己位置的概率
return dp[n];
}
}