列表

详情


DP2. 跳台阶

描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

数据范围:
要求:时间复杂度: ,空间复杂度:

输入描述

本题输入仅一行,即一个整数 n

输出描述

输出跳上 n 级台阶有多少种跳法

示例1

输入:

2

输出:

2

说明:

青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2     

示例2

输入:

7

输出:

21

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2022-06-16

#include<stdio.h>
int main()
{
    int n;
    int i;
    int sum[40];
    scanf("%d",&n);
    sum[0]=0;sum[1]=1;sum[2]=2;
    for(i=3;i<=n;i++)
    {
        sum[i]=sum[i-1]+sum[i-2];
    }
    printf("%d\n",sum[n]);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2022-05-12

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n;
    scanf("%d", &n);
    int i;
    int dp[41];
    dp[0] = 1;
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 3;
    
    for(i = 4; i <= n; i++)
        dp[i] = dp[i-1]+dp[i-2];
    printf("%d\n", dp[n]);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2022-03-05

#include <stdio.h>
#include <stdlib.h>
int dp[41];
int main()
{
    int n;
    scanf("%d", &n);
    dp[0]=0;
    dp[1]=1;
    dp[2]=2;
    for(int i=3; i<=n;i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
                           
    }
    
    printf("%d", dp[n]);
    
    return 0;
    
    
}

C 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2022-05-28

#include <stdio.h>
int f(int n) {
	int a[40], i;
	a[0] = 1;
	a[1] = 2;
	for (i = 2; i < 40; i++) {
		a[i] = a[i - 1] + a[i - 2];
	}
	return a[n - 1];
}
int main() {
	int n;
	scanf("%d", &n);
	printf("%d", f(n));
	return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 352KB, 提交时间: 2022-06-21

#include <stdio.h>
int cache[100] = {0};
int function(int number)
{
	if(cache[number] != 0)
	{
		return cache[number];
	}
	if(number == 1)
	{
		cache[number] = 1;
		return cache[1];
	}
	else if(number == 2)
	{
		cache[number] = 2;
		return cache[2];
	}
	else
	{
		cache[number] = function(number - 1) + function(number - 2);
		return cache[number];
	}
}
int main()
{
	int floor_num = 0;
	scanf("%d",&floor_num);
	int count = function(floor_num);
	printf("%d",count);
	return 0;
}

上一题