「这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战」
一、问题描述
有一堆煤球,堆成三角棱锥形。具体: 第一层放 1 个, 第二层 3 个(排列成三角形), 第三层 6 个(排列成三角形), 第四层 10 个(排列成三角形), .... 如果一共有 100000000 层,共有多少个煤球?
二、题目要求
考察
1.数学思想,规律
2.建议用时:10~20min
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
三、问题分析
本题主要考察两个重要的知识点:
第一个是每一层煤球的数量关系,能否找到每一层煤球的规律,否则暴力法不好做。
第二个是选取合理的常见存储类型存储定义,防止超出存储类型的范围,无法输出具体结果。
规律
第一层 1+0=1
第二层 1+2=3
第三层 3+3=6
第四层 4+6=10
.....
第n层 n+前一层煤球数目
看了上面的一些数据之后,相关的规律是不是很快的出结果了。
具体的规律为:当前一层的煤球数目等于前一层的煤球数目加上当前的层数序号。
常见存储类型
类型 | 存储空间大小 | 最小值 | 最大值 |
---|---|---|---|
char | 1个字节 | -128 | 127 |
float | 4个字节 | 3.4e-38 | 3.4e+38 |
int | 4个字节 | -2 147 483 648 | 2 147 483 647 |
long | 4个字节 | -2 147 483 648 | 2 147 483 647 |
double | 8个字节 | 1.7e-308 | 1.7e+308 |
long long | 8个字节 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 |
double和float存储范围很大,但毕竟是浮点型,题目的结果使用long long 整形存储也完全可以。
四、编码实现
#include<iostream>
using namespace std;
long long int a=1,b,sum=1;//lng long 初始化定义煤球数目sum等于1,算作第一层
int main()
{
int i,n;//初始化定义
cin>>n;//输入n
for(i=2;i<=n;i++)//从第二层开始循环相加
{
b=a+i;//后一个数字等于前面一个数字加上一个当前下标
sum+=b;//相加等于煤球数总和
a=b;//交替出现
}
cout<<sum;//输出结果
return 0;
}
五、输出结果
输出具体结果为:338960700901149440