202509-金字塔(luogu-B4410)

202509-金字塔(luogu-B4410)

GESP C++ 2025年9月一级真题,基础语句练习,难度★☆☆☆☆。

luogu-B4410 [GESP202509 一级] 金字塔

题目要求

题目描述

金字塔由 nn 层石块垒成。从塔底向上,每层依次需要 n×n,(n1)×(n1),,2×2,1×1n \times n, (n-1) \times (n-1), \cdots, 2 \times 2, 1 \times 1 块石块。请问搭建金字塔总共需要多少块石块?

输入格式

一行,一个正整数 nn,表示金字塔的层数。

输出格式

一行,一个正整数,表示搭建金字塔所需的石块数量。

输入输出样例 #1

输入 #1
2
输出 #1
5

输入输出样例 #2

输入 #2
5
输出 #2
55

说明/提示

对于所有测试点,保证 1n501 \leq n \leq 50


题目分析

金字塔从底到顶各层所需石块数依次为
n2, (n1)2, , 22, 12n^2,\ (n-1)^2,\ \dots,\ 2^2,\ 1^2
总石块数即求

S=i=1ni2=n(n+1)(2n+1)6S=\sum_{i=1}^{n}i^2=\frac{n(n+1)(2n+1)}{6}

由于 n50n\le 50,直接累加或套公式均可,时间复杂度 O(n)O(n)O(1)O(1),空间 O(1)O(1)

常规思路:累加法

用循环把 12+22++n21^2+2^2+\dots+n^2 逐项累加,代码直观,适合初学者。示例代码使用该方法实现。

小学数学高手思路:公式法

直接套用平方和公式 S=n(n+1)(2n+1)6S=\frac{n(n+1)(2n+1)}{6},一步算出答案,效率最高。(大家可以自己尝试)


示例代码

#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;
}

本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于