两种解法:
一、dfs(简单递归)
#include<iostream>
using namespace std;
int n,ans=0;
void dfs(int x)
{
if (x >= n + 1)return;
if (x == n)
{
ans++;
return;
}
dfs(x + 1); //吃一块
dfs(x + 2); //吃两块
}
int main()
{
while (cin >> n)
{
ans = 0; //多组输入,每次调用前先清零
dfs(0);
cout << ans << endl;
}
return 0;
}
二、递推
N块巧克力的方案=N-1块的方案(第一天吃了一块)+N-2块的方案(第一天吃了两块)
#include<iostream>
using namespace std;
int main()
{
int ans[25] = {0};
ans[1] = 1; ans[2] = 2;
for (int i = 3; i <= 20; i++) //提前打表
{
ans[i] = ans[i - 1] + ans[i - 2]; //N块巧克力的方案=N-1块的方案(第一天吃了一块)+N-2块的方案(第一天吃了两块)
}
int n;
while (cin >> n)
{
cout << ans[n] << endl;
}
return 0;
}