【GESP】C++一级真题 luogu-B4410 [GESP202509 一级] 金字塔
GESP C++ 2025年9月一级真题,基础语句练习,难度★☆☆☆☆。
luogu-B4410 [GESP202509 一级] 金字塔
题目要求
题目描述
金字塔由 $n$ 层石块垒成。从塔底向上,每层依次需要 $n \times n, (n-1) \times (n-1), \cdots, 2 \times 2, 1 \times 1$ 块石块。请问搭建金字塔总共需要多少块石块?
输入格式
一行,一个正整数 $n$,表示金字塔的层数。
输出格式
一行,一个正整数,表示搭建金字塔所需的石块数量。
输入输出样例 #1
输入 #1
1
2
输出 #1
1
5
输入输出样例 #2
输入 #2
1
5
输出 #2
1
55
说明/提示
对于所有测试点,保证 $1 \leq n \leq 50$。
题目分析
金字塔从底到顶各层所需石块数依次为
$n^2,\ (n-1)^2,\ \dots,\ 2^2,\ 1^2$。
总石块数即求
\(S=\sum_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6}\)
由于 $n\le 50$,直接累加或套公式均可,时间复杂度 $O(n)$ 或 $O(1)$,空间 $O(1)$。
常规思路:累加法
用循环把 $1^2+2^2+\dots+n^2$ 逐项累加,代码直观,适合初学者。示例代码使用该方法实现。
小学数学高手思路:公式法
直接套用平方和公式 $S=\frac{n(n+1)(2n+1)}{6}$,一步算出答案,效率最高。(大家可以自己尝试)
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main() {
int n; // 金字塔的层数
std::cin >> n; // 读取用户输入的层数n
int count = 0; // 初始化总石块数为0
// 从第n层循环到第1层,计算每层的石块数i*i,并累加到count中
for (int i = n; i > 0; i--) {
count += i * i; // 每层石块数为 i×i
}
std::cout << count << std::endl; // 输出总共需要的石块数量
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助