题目要求搭建一座金字塔,需要从塔顶到塔底(或从塔底向上)依次摆放石块:第 (1) 层(最小)需要 (1 \times 1) 块,第 (2) 层需要 (2 \times 2) 块,……,第 (n) 层需要 (n \times n) 块。求总共需要的石块数量。
本质上,本题就是计算平方和: [ S = 1^2 + 2^2 + 3^2 + \dots + n^2 ]
数据范围 (n \le 50),非常小,直接模拟求和即可通过,也可以利用数学公式快速求解。
使用一个循环,从 (1) 到 (n),每次将 (i^2) 加到一个累加器变量中,最后输出累加器即可。
平方和公式为: [ 1^2 + 2^2 + \dots + n^2 = \frac{n(n+1)(2n+1)}{6} ] 直接代入 (n) 计算即可。
我们以参考代码中的循环累加法为例进行说明。
ans = 0。i 从 1 到 n 循环:
i * i 加到 ans 上。ans。由于 (n) 很小,无需考虑溢出或性能问题。
以下是题目提供的 C++ 参考代码:
cpp1#include <algorithm> 2#include <cstdio> 3using namespace std; 4int n, ans; 5int main() { 6 scanf("%d", &n); 7 for (int i = 1; i <= n; i++) ans += i * i; 8 printf("%d\n", ans); 9 return 0; 10}
代码解释:
#include <cstdio> 引入 scanf 和 printf 用于输入输出,<algorithm> 虽然引入但本代码未使用。using namespace std; 使标准库中的名字可直接使用。int n, ans; 定义全局变量(自动初始化为 0)。scanf("%d", &n); 读取金字塔层数。for (int i = 1; i <= n; i++) ans += i * i; 循环累加平方值。printf("%d\n", ans); 输出结果。若使用公式,代码可以写成:
cpp1#include <cstdio> 2int main() { 3 int n; 4 scanf("%d", &n); 5 int ans = n * (n + 1) * (2 * n + 1) / 6; 6 printf("%d\n", ans); 7 return 0; 8}
同样能正确求出所需石块总数。
本题是平方和的基础练习题,适合初学者熟悉循环累加或应用简单数学公式。理解题意后,将问题转化为求和即可轻松解决。