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

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

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

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

题目要求

题目描述

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

Image

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

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

输入格式

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

输出格式

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

输入 #1

2

输出 #1

3

输入 #2

4

输出 #2

15

数据规模

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

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


题目分析

解题思路

  1. 首先,我们需要理解题目的核心要求:

    • 圣诞树有n层结构
    • 第i层有i个星星
    • 星星之间用绳子连接:
      • 每层的星星都与下一层最近的两个星星相连
      • 最后一层相邻星星之间也要连接
  2. 解题思路:

    • 分析绳子的构成:
      • 垂直连接的绳子:每层星星向下连接
      • 水平连接的绳子:最后一层星星之间的连接
    • 计算方法:
      • 垂直连接:
        • 第i层每个星星向下连接2根绳子
        • 除最后一层外的所有层都需要向下连接
      • 水平连接:
        • 最后一层相邻星星之间的连接
        • 需要n-1根绳子
    • 数学公式:
      • 垂直连接绳子数 = (2 + (n-1)2)(n-1)/2
      • 水平连接绳子数 = n-1
      • 总绳子数 = 垂直连接 + 水平连接
    • 特殊情况:
      • n=1时不需要绳子=1时不需要绳子

{% include custom/custom-post-content-inner.html %}


示例代码

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

{% include custom/custom-post-content-footer.md %}

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

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

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

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on