首页 > 学院 > 开发设计 > 正文

蓝桥杯 第39级台阶 (dfs and 回溯)

2019-11-08 02:13:11
字体:
来源:转载
供稿:网友

题目标题: 第39级台阶    小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!    站在台阶前,他突然又想着一个问题:    如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?    请你利用计算机的优势,帮助小明寻找答案。要求提交的是一个整数。注意:不要提交解答过程,或其它的辅助说明文字。

答案 : 51167078

方法 一 是  简单dfs 深搜  因为不是步数 要么是1  要么是2

#include<stdio.h>int res;void dfs(int step,int k){	if(k<0)		return;	if(step%2==0&&k==0)	{		res++;		return;	}	for(int i=1;i<=2;i++)  //dfs  深搜 要么是 1 步 要么是两步 	{		dfs(k-i,step+1); 	}}int main(){	dfs(39,0);	PRintf("%d/n",res);}

方法二 是 回溯     要考虑到 必须是前37台阶才能走两步  38 后 只能走一步

#include<stdio.h>int sum=0;//记录为走的步数 int x=0;int y=0;int res=0;void bbs(int num){	if(num==39)	{		if(sum%2==0)			res++;		return;	}	else	{		sum++;num++; //走一步 		bbs(num);//回溯 		sum--;num--;//还原		if(num<=37)//只有在 37 之前才能走两步 		{			sum++;num+=2;			bbs(num);			sum--;num-=2;		} 	} } int main(){	bbs(0);	printf("%d/n",res);	return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表