欢迎访问==> 【考研OR保研】机试题
题目描述
名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 $N$ 块巧克力)。
妈妈告诉名名每天可以吃一块或者两块巧克力。
假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。
例如:如果 $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 \\le N \\le 20$
输入样例:
4
输出样例:
5
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
/*
状态表示:f[i]表示吃第i块的方案数
集合划分:可以根据吃第i块的上一次是吃了1块还是2块进行集合划分
状态计算:f[i] = f[i - 1] + f[i - 2]
*/
int n, f[N];
int main()
{
//初始化
f[0] = f[1] = 1;
cin >> n;
for(int i = 2; i <= n; i ++)
{
f[i] = f[i - 1] + f[i - 2];
}
cout << f[n] << endl;
return 0;
}