c语言分配飞机10个座位,leetcode1227(飞机座位分配)--C语言实现

对于第一个乘客来说 他有三种选择

坐在正确的(自己的位置), 那么后面的乘客都不会乱,所以第n个乘客可以坐到自己的位置, 1/n * 1.

坐在第n个乘客的位置,那么第n个乘客肯定无法坐到自己的位置, 1/n * 0.

坐在[1,n-1]之间的某个位置K.

对于第K个乘客而言,自己的位置K已经被乘客1给占了,而[2,K-1]的乘客先于K乘客 上飞机,能找到自己的位置并坐下,所以当K乘客上飞机时,留给他的选择是

第1个座位,以及[K+1,n]的座位。

此时K乘客同样有3个选择,

如果他坐在正确的座位,那么后面的乘客都不会乱,第n个乘客可以坐到自己的位置,

只不过此时对于K乘客而言,正确的座位就是座位1。

坐在第n个乘客的位置,那么第n个乘客肯定无法坐到自己的位置

坐在[K+1,n-1]之间的某个位置。

可以发现对于第一个乘客和第K个乘客,他们面临的选择是一样的,只不过问题的规模不一样。第K个乘客时,问题的规模只有n-K+1. (为何, 上面已经解释过了,对于第K个乘客而言,自己的位置K已经被乘客1给占了,而[2,K-1]的乘客先于K乘客 上飞机,能找到自己的位置并坐下)。

所以此题公式为

p[1] = 1.0;

p[2] = 0.5;

p[3] = 1/3 + p[2]/3 = 0.5;

p[4] = 1/4 + p[2]/4 + p[3]/4 = 0.5

p[n] = 1/n + p[2]/n + ..... + p[n-1]/n

np[n] = 1+p[2]+p[3]+......+p[n-1];

(n+1)p[n+1]=1+p[2]+p[3]+......+p[n]

(n+1)p[n+1]-np[n]=p[n];

p[n+1]=p[n];(n>=2)

所以:

p[n]=1(n=1)

p[n]=0.5(n=2,3,4,5,...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值