您的位置:首页 > 其它

总结一类问题:铺地板砖,走楼梯,自然数拆分...

2014-04-20 14:57 267 查看
(1) 编程之美上的一题:能否用1×2的瓷砖去覆盖N×M的地板?

分析: (1) 如果N=1,M为偶数的话,1×2的瓷砖可以覆盖1×M的地板,在这种情况下,共需要M/2块瓷 砖

(2)如果N×M为奇数,也就是N和M都为奇数,则肯定不能用1×2的瓷砖去覆盖了

证明:假设能够用k块1×2的瓷砖去覆盖N*M(N,M都为奇数)的地板,设每块瓷砖的面积为1×2, 那么总的地板面积就为2k——必为偶数,又因为N,M都为奇数,也就是N×M的地板肯定为奇数,与1×2的瓷砖所能覆盖的面积相矛盾,所以肯定不能用1×2的瓷砖去覆盖它。

(3)N和M中至少有一个为偶数,不妨设M为偶数,那么既然我们可以用1×2的地板覆盖1×M的地 板,也可以简单地重复N次覆盖1×M的地板的做法,即可以覆盖N×M的地板。

扩展:求用1×2的瓷砖覆盖2×M的地板有几种方式?

设用1×2的瓷砖覆盖2×M的地板有F(M)种方式,其中F为M的函数,那么第一块瓷砖的放法如下图:



(1)第一块瓷砖竖着放



(2)第一块瓷砖横着放

通过图(1),(2)可以看出,第一块瓷砖的放法要么是竖着放,要么是横着放。

当第一块瓷砖竖着放的时候,问题转换成求1×2的瓷砖覆盖剩下的2×(M-1)的方式,即F(M-1)

当第一块瓷砖横着放的时候(必有另一块瓷砖放在其正下方,如图(2)所示),问题转换成求用1×2的瓷砖覆盖剩下的2×(M-2)的方式,即F(M-2)。

在求F(M-1)和F(M-2)时,由于第一列地板的覆盖方式已经不同,F(M-1)种覆盖方式和F(M-2)种覆盖方式没有重叠,故F(M) = F(M-1)+F(M-2),其中,F(1) =1,F(2) =2.

算法: 与走楼梯的算法一样。

楼梯的走法(华为机试模拟题中的一题)一个楼梯有N阶,从下往上走,一步可以走一阶,也可以走两阶,有多少种走法。

递归算法:



(3)自然数拆分法,没搞明白~~待续.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: