题目:
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
…
如果一共有100层,共有多少个煤球?
题解:
分析
分析:
从堆放的规律来看,从上往下,每一层的总数等于 当前的层数 + 上一层的煤球总数
即 第一层等于 层数为1,上一层没有为0 第一层等于 1+0 = 1个
第二层 层数为2,上一层总数为1个 第二层总数 2+1 = 3个
第三层 层数为3, 上一层总数为3 所以总数为 3+3 = 6个
依次类推
/**
* 有一堆煤球,堆成三角棱锥形。具体:
* 第一层放1个,
* 第二层3个(排列成三角形),
* 第三层6个(排列成三角形),
* 第四层10个(排列成三角形),
* ....
*
* 如果一共有100层,共有多少个煤球?
* @param num 层数
* @return 所有层的总数
*
* 分析:
* 从堆放的规律来看,从上往下,每一层的总数等于 当前的层数 + 上一层的煤球总数
* 即 第一层等于 层数为1,上一层没有为0 第一层等于 1+0 = 1个
* 第二层 层数为2,上一层总数为1个 第二层总数 2+1 = 3个
* 第三层 层数为3, 上一层总数为3 所以总数为 3+3 = 6个
* 依次类推
*/
private static long coalCycle(int num){
if (num <= 0){
return 0;
}
int[] sum = new int[num+1];
// 从 1 开始便于计数
// 第一层一定是一个
sum[1] = 1;
// 从第二层开始
for (int i = 2; i <= num; i++) {
// 当前层总数 等于上一层数量 + 当前层数
sum[i] = sum[i - 1] + i;
}
// 累加每一层的数量
long allSum = 1;
for (int i = 2; i <= num; i++) {
allSum += sum[i];
}
return allSum;
}