首页 > 试题广场 >

吃糖果

[编程题]吃糖果
  • 热度指数:15161 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。 妈妈告诉名名每天可以吃一块或者两块巧克力。 假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。 例如: 如果N=1,则名名第1天就吃掉它,共有1种方案; 如果N=2,则名名可以第1天吃1块,第2天吃1块,也可以第1天吃2块,共有2种方案; 如果N=3,则名名第1天可以吃1块,剩2块,也可以第1天吃2块剩1块,所以名名共有2+1=3种方案; 如果N=4,则名名可以第1天吃1块,剩3块,也可以第1天吃2块,剩2块,共有3+2=5种方案。 现在给定N,请你写程序求出名名吃巧克力的方案数目。

输入描述:
输入只有1行,即整数N。


输出描述:
可能有多组测试数据,对于每组数据,
输出只有1行,即名名吃巧克力的方案数。
示例1

输入

4

输出

5
while True:
    try:
        n=int(input().strip())
        if n==1:
            print(1)
        else:
            dp=[0]*(n)
            #print(dp)
            dp[0]=1
            dp[1]=2
            for i in range(2,n):
                dp[i]=dp[i-1]+dp[i-2]
            print(dp[n-1])
    except:
        break

动态规划

发表于 2019-07-28 15:27:29 回复(0)

递归法

def findPlan(num):
    if num <= 3:
        return num
    return findPlan(num-1) + findPlan(num-2)
try:
    while True:
        num = int(input())
        print(findPlan(num))
except Exception:
    pass
编辑于 2018-10-04 11:45:39 回复(0)
使用递归:
def StrategyOfCandy(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    else:
        return StrategyOfCandy(n-1)+StrategyOfCandy(n-2)
def MainCandy():
    N = int(input())
    method = StrategyOfCandy(N)
    print(method)
MainCandy()

发表于 2018-08-20 15:32:54 回复(0)

跳台阶问题变种。

days, res = int(input()), [1, 2]
for i in range(days):
    res.append(res[-1] + res[-2])
print(res[days - 1])
编辑于 2018-04-01 09:23:43 回复(0)
#数列是:1,2,3,5,8,13
#发现后一个数是前两项之和,递归
def f(n):
    if n==1:
        return 1
    if n==2:
        return 2
    return f(n-1)+f(n-2)
while 1:
    try:
        n=int(input())
        print(f(n))
    except:
        break

发表于 2017-09-04 20:55:21 回复(0)
def fib():
    yield 1
    yield 2
    a, b = 1, 2
    while 1:
        a, b = b, a + b
        yield b       
try:
    while 1:
        gen = fib()
        for i in xrange(input()):
            s = next(gen)
        print s
except:
    pass

发表于 2016-12-28 20:01:10 回复(0)