您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-29 13:40 555 查看
用2*1的小矩形横着或竖着去覆盖更大的矩形,用8个2*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)=1,f(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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐