文章

【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),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权