煤球数目
有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
…
如果一共有100层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字
解析:
由每一层的数目可分析得
第一层 :1个
第二层 :3个,也就是,第一层的1个+层数2 = 3个
第三层 :6个,也就是,第二层的3个+层数3 = 6个
第四层 :10个。也就是,第三层的6个+层数4 = 10个
……
……
第一百层的个数等于,第99层的个数+层数100
而由题意可依次从1,2,3推到99,100的每层的层数,然后再相加即可得到答案
代码思路为:
首先,从第1层到100层,依次推得每一层的煤球数;
然后,可以选择先将每一层的的煤球数保存到数组中,在遍历该数组把每一层的谋球数加上。
也可以在依次递推得到每一层的煤球个数时,就累加上。
代码:
public class EggetteNum {
public static void main(String[] args) {
//累加得计数器
int count = 0;
//从1下表开始,放每一层得煤球数得数组
int[] nums = new int[101];
//从第二层开始递推得到每一层得煤球数,并存入数组中
for (int i = 1; i <= 100; i++) {
if(i == 1) {//第一层直接为1
nums[1] = 1;
}else {
nums[i] = nums[i-1] + i;
}
}
//将每一层得煤球数累加
for (int i = 0; i < nums.length; i++) {
count += nums[i];
}
System.out.println(count);
}
}
结果:
171700
上面解题得方法为,递推。下面来看看什么是递推,以及该怎么用。
递推
递推算法是根据已有的数据和关系,逐步推导而得到结果。递推算法的执行过程如下:
(1)根据已知结果和关系,求解中间结果。
(2)判定是否达到要求,如果没有达到,则继续根据已知结果和 关系解中间结果。如满足要求,则表示找到
一个只正确答案。
例题:
如果一对两个月大的兔子以后每一个月都可以生一对小兔子,而一对新兔子出生两个月后才可以生小兔子。也就是说,1月份出生,3月份才可以生小兔子。那么假设一年内没有兔子失亡,那么1年后共有多少对兔子?
分析:
第一个月:1对兔子;原始那对兔子。
第二个月:1对兔子;原始那对兔子。
第三个月:2对兔子;是原来的一对兔子加刚生出来的那对兔子。
第四个月:3对兔子;原始的那对兔子+刚生出来一个月的那对兔子+刚出生的一对兔子。
第五个月:5对兔子;原始的那对兔子+出生两个月的那对兔子+出生一个月的那对兔子+原始那对刚出生的一对兔子+已经出生两个月刚生出的一对兔子。
……
由第三个月可以看出,
当月总的兔子的对数为,前两个月的兔子的对数的和,即:Fn = Fn-1+Fn2(n>=3).
从而可以由前面已知的数据递推得到后面的数据。
代码:
public class RabbitNum {
public static void main(String[] args) {
//定义一个存放每一个月的兔子的对数的数组,从下表为一开始放
int[] r = new int[13];
//初始化前两个月的兔子数,因为递推公式是从第三个月开始的
r[1] = 1;
r[2] = 1;
//依次算除每一个与月的兔子对数,并放入对应的数组空间中
for (int i = 3; i <= 12 ; i++) {
r[i] = r[i-1]+r[i-2];
}
//答应目标月份对应的兔子对数
System.out.println(r[12]);
}
}
结果:
144
递推的思路很符合我们的思维逻辑。所以应该很好理解。故以后碰到此类的题时,应该仔细观察相邻的数据
之间的关系。