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

【题解】骨牌铺方格

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

【题目描述】

有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;
}


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

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

分享给朋友:

相关文章

最大数max

【题目描述】已知:m=max(a,b,c)max(a+b,b,c)×max(a,b,b+c)m=max(a,b,c)max(a+b,b,c)×max(a,b,b+c)输入a,b,c,求m。把求三个数的...

【题解】吃糖果

【题解】吃糖果

【题目描述】小明终于从小红手里赢走了所有的糖果,小明转变吃掉所有糖果,但是小明吃糖果有个特殊癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另外一种。试问小明是否存在一种吃糖果的顺序使得...

迷宫

【题目描述】一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个...

【题解】AC

4.AC(ac.cpp) 【问题描述】 小明获得了一行字符串,他想知道在不改变字符顺序的情况下,从前到后最多能组合出多少个ac? (a和c的位置可以不连续)比如:字符串为addca...

【题解】亲戚

【题目描述】若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是...

【题解】同学的等待

【题目描述】同学们下课后去食堂,每个人都需要一段时间去点菜。然而,某些同学点菜时间太长了。同学们对于等待很烦躁:他们希望,能尽量少的花时间等待。(同学数<=100000),(0<=点菜耗时...