青蛙跳台阶,上台阶问题,总览。解析版
这类问题考的其实是对数据的分析以及处理。
我在写时,发现他们的数据有规律。
最易看出的是n阶台阶,一次上1到n阶的方法。
| n台阶 | 1 | 2 | 3 | 4 | 5 |
| 方法 | 1 | 2 | 4 | 8 | 16 |
也就是2的n-1次方。
int fn(int k)
{
if (k < 2)
return 1;
else
return 2*fn(k-1)%100003;//因为最后测试数字过大,我选择取余来缩小数字,可以去掉%100003
}
在之后为了解决n阶台阶,一次1到k阶,我发现当k相同,每次总台阶不同时的规律。
| n,k | 1,1 | 2,2 | 3,3 | 4,3 | 5,3 | 6,3 |
| 方法 | 1 | 2 | 4 | 7 | 13 | 24 |
因此,我发现第n项的方法等于前k项所和。
for (a = k+1; a < n+1; a ++)
{
for(b = a-1; b > a-k-1; b --)
{
f[a] = (f[b] + f[a]) % 100003;
}
}
总之,你绝对想不到,作为编程,需要运用到你的数学才能,加油。