瓷磚問題再討論
[問題描述]
有一長度為N(1<=N<=10)的地板,給定三種不同瓷磚:一種長度為1,一種長度為2,另一種長度為3,數(shù)目不限。要將這個(gè)長度為N的地板鋪滿,并且要求長度為1的瓷磚不能相鄰,一共有多少種不同的鋪法?在所有的鋪設(shè)方法中,一共用了長度為1的瓷磚多少塊?
例如,長度為4的地面一共有如下4種鋪法,并且,一共用了長度為1的瓷磚4塊:
編程求解上述問題。
[輸入格式]
只有一個(gè)數(shù)N,代表地板的長度
[輸出格式]
第一行有一個(gè)數(shù),代表所有不同的瓷磚鋪放方法的總數(shù)。
第二行也有一個(gè)數(shù),代表這些鋪法中長度為1的瓷磚的總數(shù)
[樣例輸入]
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 閱讀(479)
評論(0) 編輯 收藏 引用 所屬分類:
OJ平臺