您的位置:首页 > 其它

一只青蛙一次可以跳上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;  

    }  

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