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

本文介绍了一个数学问题,即使用8个2*1的小矩形无重叠地覆盖一个2*8的大矩形的方法数量。通过递归方法和斐波那契数列的应用,实现了问题的解决。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值