首页 > 试题广场 >

魔法深渊

[编程题]魔法深渊
  • 热度指数:12421 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
前几个月放映的头号玩家简直火得不能再火了,作为一个探索终极AI的研究人员,月神自然去看了此神剧。
由于太过兴奋,晚上月神做了一个奇怪的梦,月神梦见自己掉入了一个被施放了魔法的深渊,月神想要爬上此深渊。

已知深渊有 N 层台阶构成 ,并且每次月神仅可往上爬2的整数次幂个台阶(1、2、4、....),请你编程告诉月神,月神有多少种方法爬出深渊

数据范围: ,输入的数据组数满足

输入描述:
输入共有M行

第一行输入一个数M表示有多少组测试数据,

接着有M行,每一行都输入一个 N 表示深渊的台阶数


输出描述:
输出可能的爬出深渊的方式
示例1

输入

4
1
2
3
4

输出

1
2
3
6

备注:
为了防止溢出,可将输出对10^9 + 3取模
头像 牛客题解官
发表于 2020-06-04 14:44:32
精华题解 题目难度:二星 考察点:动态规划、预处理 方法1:暴力、动态规划 分析: 这个题很像之前的跳台阶:一共有n个台阶,青蛙只能跳1阶或者是2阶,问有多少种跳法? 跳台阶思路如下: 假设青蛙跳n个台阶的跳法为f(n)那么: 如果第一次跳的是1阶,那么剩下的n-1个台阶 展开全文
头像 牛客520451666号
发表于 2021-12-14 02:22:31
题1:一只青蛙一次可以跳上1级台阶,也可以跳上2级。(排列问题,先后次序不同算不同的结果) 青蛙的第一跳有两种情况,跳一阶和跳二阶。如果跳一阶,则剩下n-1阶就是f(n-1)中跳法;如果挑两阶,则剩下n-2阶就是f(n-2)种情况。所以总情况就是f(n)=f(n-1)+f(n-2);即斐波那契数列。 展开全文
头像 乐观的共享单车人最喜欢春天
发表于 2023-08-31 15:35:30
import math m=int(input()) for _ in range(m): n=int(input()) if n<4: print(n) # 小于4层时直接输出 else: l=[1,2] # n以内2的整数次幂,初始化 展开全文
头像 在吃瓜的西红柿很刻苦
发表于 2022-07-13 15:45:43
解法:动态规划(每次月神仅可往上爬2的整数次幂个台阶(1、2、4、....)) 递推公式: for i in range(2, max_m + 1):     k = 1     while i - k >= 展开全文
头像 laglangyue
发表于 2020-05-22 18:40:07
所有这类跳台阶问题,都可以考虑动态规划,考虑一步怎么到达F(n)=F(n-2^m)+F(n-2^(m-1))+...+F(n-2^0),n>=2^m;注意边界,F(0)=1。然后就是对10e9+3求模了。 import java.util.Scanner; public class Main 展开全文