递归求解代码是最简单的,由于总数不超过20,因此也不会担心递归时函数调用栈不够的问题
转化为子问题为f(n-1)+f(n-2),分别表示第一天吃一块和第一天吃两块后还有多少吃法。
#include <iostream> using namespace std; int plans(int num){ if(num==1) return 1; if(num==2) return 2; return plans(num-1)+plans(num-2); } int main() { int N; while (cin >>N) { // 注意 while 处理多个 case cout << plans(N) << endl; } } // 64 位输出请用 printf("%lld")