首页 > 编程语言 > 详细

c语言:用8个2*1的小矩形横着或竖着无重叠地覆盖一个2*8的大矩形,总共有多少种方法?

时间:2016-02-16 01:20:41      阅读:847      评论:0      收藏:0      [点我收藏+]

2*1的小矩形横着或竖着去覆盖更大的矩形,用82*1的小矩形无重叠地覆盖一个2*8的大矩形,总共有多少种方法?

解:把2*8的覆盖方法记为f(8),用第一个2*1的小矩形去覆盖大矩形的最左边时有两种选择,竖着放或横着放。当竖着放的时候,右边还剩下2*7的区域,这种情形下的覆盖方法记为f(7);当2*1的小矩形横着放在左上角的时候,左下角必须横着放一个2*1的小矩形,右边还剩下2*6的区域,这种情形下的覆盖方法记为f(6),因此f(8)=f(7)+f(6),f(1)=1f(2)=2,这实际是斐波拉契数列的变形应用,把斐波拉契数列的每一项向前移动了1位。

程序:

#include<stdio.h>


int fibonacci(int n)

{

int num1 = 1, num2 = 1, num3 = 0, i = 0;

if (n <= 1)

{

return num1;

}

for (i = 1; i < n; i++)

{

num3 = num1 + num2;

num1 = num2;

num2 = num3;

}

return num3;

}


int main()

{

int num = 0, ret = 0;

printf("请输入小矩形的个数:");

scanf("%d", &num);

ret = fibonacci(num);

printf("总共有%d种方法覆盖!\n", ret);

return 0;

}

结果:

请输入小矩形的个数:8

总共有34种方法覆盖!

请按任意键继续. . .








本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1742290

c语言:用8个2*1的小矩形横着或竖着无重叠地覆盖一个2*8的大矩形,总共有多少种方法?

原文:http://yaoyaolx.blog.51cto.com/10732111/1742290

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!