列表

详情


NC208122. 花生米

描述

小Z上课的时候吃起了花生米,他这一包花生米一共有n粒,为了不被老师发现,他一次只能吃下一粒两粒或三粒,请问小Z有多少种方法在不被老师发现的情况下吃完一整包花生米?

输入描述

输入数据首先包含一个整数n(1<=n<=100),表示测试实例的个数,然后是n行数据,每行包含一个整数m,(1<=m<=70),表示花生粒数。

输出描述

对于每个测试实例,请输出不同吃法的数量。

示例1

输入:

3
1
2
3

输出:

1
2
4

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 352K, 提交时间: 2020-08-26 20:57:15

#include<cstdio>

long long f[105];
int main()
{
	int n,m;
	f[1]=1;f[2]=2;f[3]=4;
	for(int i=4;i<=70;i++) f[i]=f[i-1]+f[i-2]+f[i-3];
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		printf("%lld\n",f[m]);
	}
}

Python(2.7.3) 解法, 执行用时: 16ms, 内存消耗: 2904K, 提交时间: 2020-06-20 13:03:35

a = [1 , 1 , 2]


def main():
    n = int(raw_input())
    print a[n]
        
for i in range(3 , 71):
    a.append(a[i - 1] + a[i - 2] + a[i - 3])
t = int(raw_input())
for i in xrange(t):
    main()

pypy3(pypy3.6.1) 解法, 执行用时: 55ms, 内存消耗: 27408K, 提交时间: 2020-06-20 13:11:39

M = 1000
dp = [0] * M
dp[0] = 1
for i in range(1, M):
    for j in range(1, 4):
        if i - j >= 0:
            dp[i] += dp[i - j]
t = int(input())
for _ in range(t):
    print(dp[int(input())])

Python3(3.5.2) 解法, 执行用时: 19ms, 内存消耗: 3352K, 提交时间: 2020-07-23 16:45:50

a=int(input())
for x in range(a):
    b=int(input())
    c,d,e= 1,1,2
    for y in range(b):
        c,d,e=d,e,c+d+e
    print(c)

上一题