C爬楼梯问题n级楼梯每次可以爬123级一共步数为m?
include <iostream>。include <string>
最新回答
1、include <iostream>
include <string>
using namespace std;
int n,m;//由题,n为级数,m为步数
long long cnt0;//统计情况总数
void dfs(int step_climb,string ans,int left)//step_climb为已经走了几步
{//ans为最后输出的字符串答案,left为剩余的台阶级数
if(step_climb>m||left<0)//如果走了不止m步或者走过头(台阶剩余为负)
{
return ;
}
if(step_climbm&&left0)//如果正好走m步并且没有台阶剩余
{
ans.erase(ans.begin());//删去多余的-连接号
cout<<ans<<endl;//输出答案
cnt++;//计数器+1
return;
}
dfs(step_climb+1,ans+"-1",left-1);//向三种情况递归搜索,ans添加当前这一步的级数
dfs(step_climb+1,ans+"-2",left-2);
dfs(step_climb+1,ans+"-3",left-3);
}
int main()
{
cin>>n>>m;
dfs(0,"",n);
cout<<"一共有"<<cnt<<"种情况"<<endl;
}若有疑问欢迎回复
相关问题
C爬楼梯问题n级楼梯每次可以爬123级一共步数为m
- include <iostream>
include <string>
using namespace std;
int n,m;//由题,n为级数,m为步数
long long cnt0;//统计情况总数
void dfs(int step_climb,string ans,int left)//step_climb为已经走了几步
{//ans为最后输出的字符串答案,left为剩余的台阶级数
if(step_climb>m||left<0)//如果走了不止m步或者走过头(台阶剩余为负)
{
return ;
}
if(step_climbm&&left0)//如果正好走m步并且没有台阶剩余
{
ans.erase(ans.begin());//删去多余的-连接号
cout<<ans<<endl;//输出答案
cnt++;//计数器+1
return;
}
dfs(step_climb+1,ans+"-1",left-1);//向三种情况递归搜索,ans添加当前这一步的级数
dfs(step_climb+1,ans+"-2",left-2);
dfs(step_climb+1,ans+"-3",left-3);
}
int main()
{
cin>>n>>m;
dfs(0,"",n);
cout<<"一共有"<<cnt<<"种情况"<<endl;
}若有疑问欢迎回复