百层煤球,正三棱锥的球体堆积问题。
煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有100层,共有多少个煤球?
当我们看到这个问题时,其实第一反应,是用两层for循环,因为这个用计算机解决起来应该是很简单的,虽然会耗费一些内存空间,无非是等差数列的通项求和。
int i;
int j;
int sum = 0;
for(i = 1; i<= 100; i++)
for(j = 1; j <= i; j++)
sum += j;
1+3+6+...+,可问题是,这个看起来简单的求和,仿佛如一道大山挡在我们的面前。那么这有没有一个通用的数学公式呢?答案是有的。让我们开始推导一遍。
这是一个煤球层的俯视图,只画了一部分,但是也能够看清楚结构了,红色的是最底层。我们的思想是什么,就是要化三角形为正方形,这些层是可以通过移动方块而变成正方形的,让我们开始行动。
1.将 黑色 与 红色 之间的那一条斜线上的煤块,齐平的放入红色块中,
2.将黑色的那条斜线上的煤块,再齐平的放入红色块中
3.依次类推,我们会将红色平面填成一个正方形,而每一层的斜线又少了一层,并且这种少是隔一层少的,而不是连续少的。也就是平面正方形的边长间距为2,大家用头脑演示一遍这个过程,即可理解。
于是我们可以得出一个公式。
n^2 + (n-2)^2 + (n-4)^2 +.......+2直接上手写的演算过程。