当前位置:首页 > 题解目录 > 正文内容

【题解】骨牌铺方格

亿万年的星光10个月前 (01-20)题解目录1003

【题目描述】

有1×n(n<=50)的一个长方形,用一个1×1、1×2和1×3的骨牌铺满方格,请问有多少种铺法?

例如当n=3时为1×3的方格。此时用1×1、1×2和1×3的骨牌铺满方格,共有四种铺法。如下图:

【输入描述】

一个整数n(n<=50)

【输出描述】

骨牌的铺法

【样例输入】

3

【样例输出】

4


【思路1】

n为1的时候,方法数F1=1

n为2的时候,方法数F2=2

n为3的时候,方法数F3=4

 

n为4的时候,方法数F4的分析如下:

第一块放1*1,有一种方法;剩余3块方法数是F3=4种。根据乘法原理,该种情况的方法数是1*4=4

第一块放1*2,有一种方法;剩余2块方法数是F2=2种。根据乘法原理,该种情况的方法数是1*2=2.

第一块放1*3,有一种方法;剩余1块方法数是F1=1种。该种情况方法数是1*1=1.

根据分类原理,F4=4+2+1=7种。

 

……

 

故n>=4的时候,Fn=Fn-1+Fn-2+Fn-3


#include <iostream>
using namespace std;
//对于1xn长方形
//先决定第一个放的方式,有三种,1x1/1x2/1x3,放好之后,剩余的恰好是1x(n-1)、1x(n-2)、1x(n-3),所以可以用递归的方式来决定。
int An(int n){
	if ( n==1 ) {
		return 1;
	}else if ( n==2) {
		return 2;
	}else if ( n==3) {
		return 4;
	}else {
		return An(n-1)+An(n-2)+An(n-3);
	}
}

int main() {
	int n,sum=0;
	cin>>n;
	cout<<An(n)<<endl;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

分享给朋友:

相关文章

【题解】前缀最大值

【题目描述】求一个数列的所有前缀最大值之和。即:给出长度为n的数列a[i],求出对于所有1<=i<=n,max(a[1],a[2],...,a[i])的和。比如,有数列:666 304 6...

【题解】特殊的质数肋骨

【题目描述】农民约翰母牛总是产生最好的肋骨。你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们。农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数字都组...

【题解】增添战斗力

【题目描述】大战即将来临,杰洛特需要为自己增添战斗力,广袤的大陆有诸多豪杰,正好可以为杰洛特所用    杰洛特分别有两处地方n1,n2需要豪杰的战斗力    一...

【题解】导弹拦截

【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导...

【题解】尼科彻斯定理

【题目描述】 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。【输入描述】任一正整数【输出描述】该数的立方分解为一串连续奇数的和【样例输入】13【样例输出】13*13*...

【题解】奇偶校验

【题目描述】奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数 是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。现在给...