文章

【GESP】C++二级练习 luogu-B3735 [信息与未来 2018] 圣诞树

GESP二级练习,一道数学小题,难度★☆☆☆☆。

luogu-B3735 [信息与未来 2018] 圣诞树

题目要求

题目描述

圣诞树共有 $n$ 层,从上向下数第 $1$ 层有 $1$ 个星星、第 $2$ 层有 $2$ 个星星、以此类推,排列成下图所示的形状。

Image

星星和星星之间用绳子连接。第 $1,2,\cdots, n - 1$ 层的每个星星都向下一层最近的两个星星连一段绳子,最后一层的相邻星星之间连一段绳子。

你能算出如果要布置一棵很大($n$ 层)的圣诞树,需要买多少段绳子吗?

输入格式

输入一行一个整数 $n$,圣诞树的层数。

输出格式

输出一行一个整数,代表圣诞树中绳子的段数。

输入 #1

1
2

输出 #1

1
3

输入 #2

1
4

输出 #2

1
15

数据规模

所有数据满足 $1 ≤ n ≤ 10^3$。

本题原始满分为 $15\text{pts}$。


题目分析

解题思路

  1. 首先,我们需要理解题目的核心要求:
    • 圣诞树有n层结构
    • 第i层有i个星星
    • 星星之间用绳子连接:
      • 每层的星星都与下一层最近的两个星星相连
      • 最后一层相邻星星之间也要连接
  2. 解题思路:
    • 分析绳子的构成:
      • 垂直连接的绳子:每层星星向下连接
      • 水平连接的绳子:最后一层星星之间的连接
    • 计算方法:
      • 垂直连接:
        • 第i层每个星星向下连接2根绳子
        • 除最后一层外的所有层都需要向下连接
      • 水平连接:
        • 最后一层相邻星星之间的连接
        • 需要n-1根绳子
    • 数学公式:
      • 垂直连接绳子数 = (2 + (n-1)2)(n-1)/2
      • 水平连接绳子数 = n-1
      • 总绳子数 = 垂直连接 + 水平连接
    • 特殊情况:
      • n=1时不需要绳子=1时不需要绳子


示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main() {
    // 定义变量n用于存储圣诞树的层数
    int n;
    // 从标准输入读取层数
    cin >> n;
    // 定义变量ans用于存储所需绳子的总段数
    int ans = 0;
    // 如果只有一层,不需要绳子
    if (n == 1) {
        ans = 0;
    } else {
        // 计算所需绳子总段数
        // 每层向下连接的绳子数:(2 + (n-1)*2)*(n-1)/2
        // 最后一层相邻星星之间的绳子数:(n-1)
        ans = (2 + (n - 1) * 2) * (n - 1) / 2 + (n - 1);
    }
    // 输出结果
    cout << ans;
    return 0;
}

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

GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页

luogu-”系列题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

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

本文由作者按照 CC BY 4.0 进行授权