随笔 - 18  文章 - 5  trackbacks - 0
<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

程序设计基础

牛们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

瓷砖问题再讨论

[问题描述]

       有一长度为N(1<=<=10)的地板,给定三种不同瓷砖:一种长度为1,一种长度为2,另一种长度为3,数目不限。要将这个长度为N的地板铺满,并且要求长度为1的瓷砖不能相邻,一共有多少种不同的铺法?在所有的铺设方法中,一共用了长度为1的瓷砖多少块?

       例如,长度为4的地面一共有如下4种铺法,并且,一共用了长度为1的瓷砖4块:

       编程求解上述问题。

[输入格式]

       只有一个数N,代表地板的长度

[输出格式]

       第一行有一个数,代表所有不同的瓷砖铺放方法的总数。

       第二行也有一个数,代表这些铺法中长度为1的瓷砖的总数

[样例输入]

4

[样例输出]

4

4

 

#include<iostream>
using namespace std;
int main()
{
    
long int f1=1,f2=0,f3=1;
    
long int g1=0,g2=1,g3=2;
    
long int n1=1,n2=0,n3=1;
    
long int m1=0,m2=0,m3=1;
    
long int tempa, nowa,tempb,nowb;
    
int n,i;
    cin
>>n;
    
if (n>2)
    
{
        
for (i=2;i<n;i++)
        
{
            tempa
=f3;
            nowa
=g3;
            f3
=g3;
            g3
=f1+g1+f2+g2;
            f1
=f2;
            f2
=tempa;
            g1
=g2;
            g2
=nowa;
            tempb
=n3;
            nowb
=m3;
            m3
=n1+m1+n2+m2;
            n3
=nowb+nowa;
            m1
=m2;
            m2
=nowb;
            n1
=n2;
            n2
=tempb;
        }

        cout
<<f2+g2<<endl;
        cout
<<n2+m2<<endl;
    
return 0;
    }

    
if (n=1)
    
{
        cout
<<f1+g1<<endl;
        cout
<<n1<<endl;
        
return 0;
    }

    
if (n=2)
    
{
        cout
<<f2+g2<<endl;
        cout
<<n2<<endl;
    }
   
    
return 0;
}
posted on 2009-12-27 18:47 jyy 阅读(461) 评论(0)  编辑 收藏 引用 所属分类: OJ平台

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理