您的位置:首页 > 其它

蓝桥杯真题 39层台阶(dfs)

2017-03-21 19:34 141 查看
题目描述 第39阶台阶 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 
站在台阶前,他突然又想着一个问题: 
如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多 
少种不同的上法呢? 
请你利用计算机的优势,帮助小明寻找答案。 
要求提交的是一个整数。 注意:不要提交解答过程,或其它的辅助说明文字
#include<stdio.h>
int count=0;
int dfs(int step,int bushu)
{
if(step==39&&!(bushu&1))//步数必须是偶数(39层台阶,最后一步是右脚)
{
count++;
}
else if(step>39)
return;
return	dfs(step+1,bushu+1)+dfs(step+2,bushu+1);//每次可以上1层或2层台阶
}
int main()
{
dfs(0,0);
printf("%d",count);
return 0;
}

在这个代码中学会了n&1的用法单纯的&1是没有意义的 而且是非法的,但是一个变量n&1
是合法的,代表的意思是n和1做二进制的且运算,即看n的最后边(二进制)那一位是不是1。是1的话,返回1,否则返回0。等效于n%2==0/1,但是a%2的效率要低一些
没有&运算快在C/C++语言里,&代表取地址或者“位与”运算
1、取变量的地址:&变量名,这将获得该变量的地址,例:int a = 1, &p = a。

2、进行位与运算,格式是:变量1&变量2,进行计算时,将会把类型提升为int。

“位与”运算是“位运算”的一种,运算法则是在二进制数下,相同位的两个数字都为1,则为1;若有一个不为1,则为0。&运算通常用于二进制取位操作,例如一个数 & 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

再举个例子,6的二进制是110,11的二进制是1011,那么6 & 11(也可以表达为6 and 11)的结果就是二进制的10,即十进制的2。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: