首页 > 代码库 > 骨牌铺方格

骨牌铺方格

骨牌铺方格

 

在1×n的一个长方形方格中,用1×1、1×2、1×3的骨牌铺满方格,输入n ,输出铺放方案的总数。 例如n=3时,为1× 3方格,骨牌的铺放方案有四种,如下图:

 

 

Input

输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是1×n

 

Output

对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。

 

Sample Input

 

1
2
3
0

Sample Output

 1
 2
 4
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# include<stdio.h>
int d[3]={1,2,3};
int n,cnt;
void DFS(int index)
{
    int i;
    if(index>n)return;
    if(index==n)
    {
        cnt++;
        return;
    }
    for(i=0;i<=2;i++)
        DFS(index+d[i]);
}
int main()
{
    while(scanf("%d",&n)&&n)
    {
        cnt=0;
        DFS(0);
        printf("%d\n",cnt);
    }
    return 0;
}

  超时了

规律

# include<stdio.h>
int d[3]={1,2,3};
int n,cnt;
void DFS(int index)
{
    int i;
    if(index>n)return;
    if(index==n)
    {
        cnt++;
        return;
    }
    for(i=0;i<=2;i++)
        DFS(index+d[i]);
}
int main()
{
    while(scanf("%d",&n)&&n)
    {
        cnt=0;
        DFS(0);
        printf("%d\n",cnt);
    }
    return 0;
}