【GESP】C++二级练习 luogu-B3735 [信息与未来 2018] 圣诞树
GESP二级练习,一道数学小题,难度★☆☆☆☆。
luogu-B3735 [信息与未来 2018] 圣诞树
题目要求
题目描述
圣诞树共有 $n$ 层,从上向下数第 $1$ 层有 $1$ 个星星、第 $2$ 层有 $2$ 个星星、以此类推,排列成下图所示的形状。
星星和星星之间用绳子连接。第 $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}$。
题目分析
解题思路
- 首先,我们需要理解题目的核心要求:
- 圣诞树有n层结构
- 第i层有i个星星
- 星星之间用绳子连接:
- 每层的星星都与下一层最近的两个星星相连
- 最后一层相邻星星之间也要连接
- 解题思路:
- 分析绳子的构成:
- 垂直连接的绳子:每层星星向下连接
- 水平连接的绳子:最后一层星星之间的连接
- 计算方法:
- 垂直连接:
- 第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 进行授权