学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
为了让中小学生更好地理解题目,我们可以将背景设定为一个游戏场景。在这个游戏中,玩家需要帮助愚公移山,屏幕上出现 n 个积木,屏幕下方的底盘是二维方格,每个方格恰好能放置一个积木。
积木放置的规则是:底盘由多行多列的方格组成,每一列必须从最左边的一列开始摆放,每列从最下面的方格开始连续摆放积木,底盘至少要放两列,后一列放的积木数至少比前一列多一个。
下图为 5 个积木所能摆放的 2 种方案:
玩家需要思考如何将这些积木放置在底盘上,使得所有积木都能够被放置,并且符合规则。玩家可以通过不断尝试和调整来寻找合法的摆放方案,从而完成愚公移山的任务。
现在,请你帮助计算 n 个积木共有多少种摆放方案呢?
【输入】
一行,一个整数 n。
【输出】
一行,一个整数,表示结果。
【输入样例】
5
【输出样例】
2
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, ans;
void dfs(int x, int last, int sum)
{
if (sum==n) {
if (x-1<2) return;
ans++;
return;
}
for (int i=last+1; i<=n-sum; i++) {
dfs(x+1, i, sum+i);
}
}
int main()
{
cin >> n;
dfs(1, 0, 0);
cout << ans << endl;
return 0;
}
【运行结果】
5
2