一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳3级。求该青蛙跳上一个n级的台阶总共有多少种跳法,并且打印所有跳跃路径。
2017-08-30 10:41
465 查看
问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳3级。求该青蛙跳上一个n级的台阶总共有多少种跳法,并且打印所有跳跃路径。
/**
* 跳台阶
* @param hasJumped 已经跳过的台阶路径
* @param currentStair 当前所在的台阶编号
* @param jumpStep 跳跃的台阶数
* @param maxStep 青蛙能跳的最大台阶数
* @param stairNum 台阶总数
*/
#include<vector>
#include<string>
using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> hasjump,int curr,int maxstep,int total)
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total;i++)
{
if(hasjump[i]>0)
path.push_back(hasjump[i]);
}
res.push_back(path);
path.clear();
return res;
}
if(curr<total)
{
for(int j=maxstep;j>=1;j--)
{
int newcurr=curr+j;
//if(newcurr<=total)
hasjump[curr]=newcurr;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
}
return res;
}
}
int main()
{
int total=7;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
*
*
* Date
96a6
: 2017-2-17
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> &hasjump,int curr,int maxstep,int total)///必须要引用参数!
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total+1;i++)
{
if(hasjump[i]>0)
path.push_back(i);
}
res.push_back(path);
path.clear();
hasjump[curr]=0;
return res;
}
if(curr<total)
{
for(int j=1;j<=maxstep;j++)///从1加到3;;;
{
hasjump[curr]=1;
int newcurr=curr+j;
if(newcurr<=total)
hasjump[newcurr]=1;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
hasjump[curr]=0;
}
return res;
}
}
int main()
{
int total=5;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total+1);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
/**
* 跳台阶
* @param hasJumped 已经跳过的台阶路径
* @param currentStair 当前所在的台阶编号
* @param jumpStep 跳跃的台阶数
* @param maxStep 青蛙能跳的最大台阶数
* @param stairNum 台阶总数
*/
#include<vector>
#include<string>
using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> hasjump,int curr,int maxstep,int total)
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total;i++)
{
if(hasjump[i]>0)
path.push_back(hasjump[i]);
}
res.push_back(path);
path.clear();
return res;
}
if(curr<total)
{
for(int j=maxstep;j>=1;j--)
{
int newcurr=curr+j;
//if(newcurr<=total)
hasjump[curr]=newcurr;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
}
return res;
}
}
int main()
{
int total=7;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<vector<int>> res;
vector<int> path;
/************************************************
*
*
* Date
96a6
: 2017-2-17
* Declaration: All Rigths Reserved !!!
***********************************************/
vector<vector<int>> jumpstair(vector<int> &hasjump,int curr,int maxstep,int total)///必须要引用参数!
{
if(curr>total)
return res;
if(curr==total)
{
for(int i=0;i<total+1;i++)
{
if(hasjump[i]>0)
path.push_back(i);
}
res.push_back(path);
path.clear();
hasjump[curr]=0;
return res;
}
if(curr<total)
{
for(int j=1;j<=maxstep;j++)///从1加到3;;;
{
hasjump[curr]=1;
int newcurr=curr+j;
if(newcurr<=total)
hasjump[newcurr]=1;
// for(int k=curr+1;k<curr+j;k++)//
// hasjump[k]=0;
jumpstair(hasjump,newcurr,maxstep,total);
hasjump[curr]=0;
}
return res;
}
}
int main()
{
int total=5;
int maxstep=2;
// int hasjump[5]={0};
vector<int> hasjump(total+1);
jumpstair(hasjump,0,maxstep,total);
cout<<" res"<<res.size()<<endl;
for(int i=0;i<res.size();i++)
{
{
for(int j=0;j<res[i].size();j++)
cout<<res[i][j]<<" ";
}
cout<<"\n";
}
return 0;
}
相关文章推荐
- 一只青蛙一次可以跳上1级台阶也可以跳上2级求该青蛙跳上一个n级的台阶总共有多少种跳法
- 变态跳台阶-一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- (算法题)一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
- 《剑指offer》-一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
- c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
- 《剑指offer》-一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- java实现一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- java 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- java实现一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 斐波那契数列系列问题,题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- java实现一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- c语言:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法?
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
- java 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。