博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
青蛙跳
阅读量:4705 次
发布时间:2019-06-10

本文共 2411 字,大约阅读时间需要 8 分钟。

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70)。

 

输出:

对应每个测试案例,

输出该青蛙跳上一个n级的台阶总共有多少种跳法。

 

样例输入:
5
样例输出:
8
---------------------------------------------------------------------------------------------------
递推公式:f(n)=f(n-1)+f(n-2) ,n>2; f(1)=1,f(2)=2;海涛:第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。因此n级台阶时的不同跳法的总数f(n)=f(n-1)+(f-2)。

------------------------------------------------------------------------------------------------------------

递归方法:

动态规划:

   

#include <stdio.h>
#include <stdlib.h>
typedef unsigned int U32;
static U32 frog_jump_ways(U32 n);

int main() {

U32 n;
printf("Please input number:");
scanf("%u", &n);
printf("frog jum ways are %u\n", frog_jump_ways(n));
return 0;
}

static U32 frog_jump_ways(U32 n) {


U32 i, ret = 0;
U32* waysPtr = (U32*) calloc(n + 1, sizeof(U32));

if (waysPtr == NULL)
        return ret;

for (i = 1; i <= n; i++) {


        if (i == 1 || i == 2) {

                waysPtr[i] = i;
        } else {

                waysPtr[i] = waysPtr[i - 2] + waysPtr[i - 1];
        }

}
ret = waysPtr[n];
free(waysPtr);
return ret;
}
 
 
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int N=71;
long long val[N];
long long f(const int n){
 if(n==1)
  return 1;
 else if(n==2)
  return 2;
 else{
  if(val[n-1]==0)
   val[n-1]=f(n-1);
  if(val[n-2]==0)
   val[n-2]=f(n-2);
  val[n]=val[n-1]+val[n-2];
  return val[n];
 }
}
int main()
{
 int n;
 memset(val,0,sizeof(val));
 while(scanf("%d",&n)!=EOF){
  printf("%ld\n",f(n));
 }
 return 0;
}
 

 

变态跳法:

---------------------------------------------------------------------------------------------------------------------------------

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

 

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入包括一个整数n(1<=n<=70)。

 

输出:

对应每个测试案例,

输出该青蛙跳上一个n级的台阶总共有多少种跳法。

 

样例输入:
5
样例输出:
8

---------------------------------------------------------------------------------------------------------------

#include<iostream>

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
const int N=51;
long long val[N];
long long f(const int n){
    if(n==1)
        return 1;
    else if(n==2)
        return 2;
    else{
        int i;
        long long sum=0;
        for(i=n-1;i>=1;i--){
           if(val[i]==0)
              val[i]=f(i);
           sum+=val[i];
        }
        return sum+1;
    }
}
int main()
{
    int n;
    memset(val,0,sizeof(val));
    while(scanf("%d",&n)!=EOF){
        printf("%lld\n",f(n));
    }
    return 0;
}

转载于:https://www.cnblogs.com/xiao-wei-wei/p/3354776.html

你可能感兴趣的文章
python之面向对象
查看>>
vi命令
查看>>
文件操作(把源文件拷贝到目标文件路径下)
查看>>
spring-mvc报红错误
查看>>
springboot 整合redis 以及redis的简单使用
查看>>
BZOJ 3884 上帝与集合的正确用法(扩展欧拉定理)
查看>>
心肝脾肺肾的功能
查看>>
[转]不看这篇也许会节省你十分钟,但是却会耽误你的一辈子
查看>>
Linux实战教学笔记08:Linux 文件的属性(上半部分)
查看>>
666
查看>>
[转载]Java(Android)对文件全文生成MD5摘要
查看>>
String.replaceAll()方法替换字符串中的反斜杠(\)
查看>>
Go语言实战 - revel框架教程之MongDB的最佳搭档revmgo
查看>>
Hive简单安装
查看>>
设计模式学习之工厂方法(Factory Method,创建型模式)(2)
查看>>
iOS蓝牙开发(一)蓝牙相关基础知识
查看>>
Collection接口源码解读
查看>>
学习vue2
查看>>
eclipse启动tomcat无法访问
查看>>
方法contextOpenNI: 深度图显示方法
查看>>