1331 小明上楼梯 II
来源:互联网 发布:中电数据董事长李世峰 编辑:程序博客网 时间:2024/05/01 17:39
- 描述
小明每次回家都要上n级楼梯。有时小明一次上1级楼梯,有时一次上2级楼梯。现在小明每次随机走1级或2级楼梯,请问它若恰好上到第n级楼梯时,次数的期望值。(如果在第n-1的位置要上2级楼梯,则整个过程作废)
- 输入
第一行是1个正整数t,表示有t组数据,以下t行每行有1个正整数n,表示需要走n级楼梯(n <= 30)。
- 输出
对于每个n,输出一个整数,即上这n级楼梯的期望次数,小数点后保留2位。
样例输入5
1
2
3
5
10
样例输出
1.00
1.33
2.20
3.48
6.78
- 提示
先计算第i次上楼梯时所在位置的概率分布。
这是一道数学题,思路如下:
首先我设了一个数组p[i], 用来记录登上第i个台阶的概率, 比如登上台阶1的概率是1/2, 登上台阶2的概率是3/4 = 1/2+1/2*1/2
具体公式是: p[i] = 1- p[i-1]/2
然后现在考虑登上台阶i需要的次数的期望e[i], 显然可以用在i-1台阶的时候登1级台阶或者i-2台阶的时候登2级台阶来到达, 而这里关键是这两者的概率分别是多少
假设前者的概率是p1, 后者的概率是p2,
运用条件概率公式(这里可能其实是贝叶斯公式 ) p1 = p[i-1]* 1/2 / p[i]; p2 = p[i-2]* 1/2 / p[i];
然后计算期望: e[i] = p1*(e[i-1]+1)+p2*(e[i-2]+1);此题先打表比较好
#include<cstdio>#include<cstring>#include <iostream>using namespace std;int main(){int number,t;int op;int i;double p[32];double pp1,pp2;double e[32];p[1]=0.5;p[2]=0.75;for(i=3;i<=31;i++){p[i]=1-p[i-1]/2;}e[1]=1.00;e[2]=4.0/3.0;for(i=3;i<=30;i++){pp1=p[i-1]*0.5/p[i];pp2=p[i-2]*0.5/p[i];e[i]=pp1*(e[i-1]+1)+pp2*(e[i-2]+1); }scanf("%d",&number);for(t=1;t<=number;t++){scanf("%d",&op);printf("%.2lf\n",e[op]);}return 0;}
- 1331 小明上楼梯 II
- 楼梯
- 爬楼梯
- 爬楼梯
- 爬楼梯
- 爬楼梯
- 超级楼梯
- 爬楼梯
- 爬楼梯
- 音乐楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 走楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 解决如何知道一个期刊被哪个数据库收录
- Activity-onSaveInstanceState()、onRestoreInstanceState() 分析
- 计算MEID校验位的算法函数
- windows7 每次开机需要点一下啊用户 才能进入系统(转)
- linux下连接mssql2000的配置
- 1331 小明上楼梯 II
- 几个笔试必备string函数(已经调过)
- 实战:sqlserver 类型自动判断和条件检查的备份脚本
- VB.NET 程序打包(vs2010)
- Oracle 11g Alert Log 日志位置及参数
- 简单的持久层框架尝试
- WM_COPYDATA实现进程间数据共享
- Linux-2.6.25内核帧缓冲设备驱动分析
- vc6.0下使用release版本调试