蓝桥杯 第39阶台阶
来源:互联网 发布:淘宝客乱扣佣金 编辑:程序博客网 时间:2024/05/29 17:52
3、题目标题: 第39级台阶(满分8分)
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!
站在台阶前,他突然又想着一个问题:
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请你利用计算机的优势,帮助小明寻找答案。
思路1:递归求解 说一下我的思路:
b 用来表示左脚还是右脚:
b=0, 表示这一步要跨左脚 ,(也表示跨了奇数步)
b=1,表示这一步要跨右脚,(也表示跨了偶数步)
当台阶只剩下一个时,这时 必须要跨右脚,才达到偶数步。
a 用来表示要跨的步数:
当a==2时,不管b==0还是1,都各有一种走法(这两种跨法不同),自己思考是跨左脚还是跨右脚。
我就合成一个了。
已知ans[1]=0,ans[2]=1,下面就可以递归求解了。
思路2:排列组合
答案:
51167078
附上代码:
- #include<stdio.h>
- int fac(int a, int b)
- {
- if(a==1)
- {
- if(b==1)return 1;
- return 0;
- }
- if(a==2)
- return 1;
- return (fac(a-1,!b)+fac(a-2,!b));
- }
- int main()
- {
- printf("%d\n", fac(39,0));
- //ans = 51167078 true
- return 0;
- }
方法二:
/*#include<stdio.h>int k=0;int f(int x,int y){//x为阶梯数,y记录上阶梯的次数 if(x<0) //如果阶梯数小于0了 return 1; if(x==0&&y%2==0) //x减少到0,并且为偶数步,则k至增 return k++; f(x-1,y+1); f(x-2,y+1);}int main(){ f(39,0); printf("%d",k);}*/
方法三:
- #include <stdio.h>
- int combination(int m,int n)//c(n,m)
- {
- int ans=1,i;
- for(i=1;i<=m;i++)
- ans=ans*(n-m+i)/i;
- return ans;
- }
- int main()
- {
- int i,ans=0;
- int n;
- scanf("%d",&n);
- for(i=1;i<=n-i;i+=2)
- ans+=combination(i,n-i);
- printf("%d\n",ans);
- return 0;
- }
0 0
- 第39阶台阶 - 蓝桥杯
- 第39阶台阶 - 蓝桥杯
- 第39阶台阶(蓝桥杯)
- 蓝桥杯 第39阶台阶
- 第39阶台阶
- 第39阶台阶
- 2013蓝桥杯预选:第39阶台阶
- 2013蓝桥杯预选:第39阶台阶
- 蓝桥杯 第39阶台阶(dfs)
- 蓝桥杯试题 第39阶台阶
- 蓝桥杯真题 第39阶台阶
- 蓝桥杯 第39级台阶
- 蓝桥杯 第39级台阶
- 蓝桥杯 第39级台阶
- 蓝桥杯--第39级台阶
- 【蓝桥杯】【第39级台阶】
- 蓝桥杯--第39级台阶
- 蓝桥杯 《第39级台阶》
- 正则中需要转义的特殊字符小结
- CSS 之 display:table
- Oracle获取时间或者月份列表
- Java基本数据类型
- Ajax导出Excel的做法流程
- 蓝桥杯 第39阶台阶
- vim中空格替换为换行及删除换行
- 微信硬件平台设备直连全讲解(1)开发前的准备
- 字节流-FileInputStream_FileOutputStream_BufferedInputStream_BufferedOutputStream
- Makefile详解——从入门到精通
- gitlib项目迁移到新Gitlab Server
- Android之Adapter的封装与抽象(二)
- arcengine 捕捉笔记
- 【转】一个十二年老程序猿的碎碎念