瓷砖问题再讨论
[问题描述]
有一长度为N(1<=N<=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平台