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

(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)自然数拆分法,没搞明白~~待续.....


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值