您的位置:首页 > 其它

条形码设计

2015-08-12 22:15 375 查看

条形码设计

Time Limit: 1000ms
Memory Limit: 65536KB
64-bit integer IO format: %lld Java class name: Main

Submit Status

校ACM队准备筹划向学校批请一个专用机房。但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个。这种大小为2*n的条形码由以下三种元素构成:1*2、2*1、2*2的长方形方格。但是我们同样也知道,很多人都容易在刷卡时把卡的位置搞反。为了避免机器错误的处理,我们认为下图的两种条形码是一样的(图中颜色只是为方便说明,不用考虑)。



FL现在很想知道一个问题,就是用她的这种条形码编码方式,对于一个给定的长度n最多能有多少不同的条形码可供使用?

Input

多组测试数据,每一行一个正整数n(n≤28),以n = 0时作为结束。

Output

最与每一组数据,先输出“Case k:”,其中k代表case数,接下来输出一个数,可用的的条形码数目m(m不超过231.)

Sample Input

1
2
3
4
5
0

Sample Output

Case 1:1
Case 2:3
Case 3:3
Case 4:8
Case 5:12
先算出所有的种树,在减去对称的。就是加上不对称的再除以2


#include<iostream>
#include<cstdio>
using namespace std;
int f[50];
int main()
{
f[1]=1;
f[2]=3;
for(int i=3;i<=50;i++)
{
f[i]=2*f[i-2]+f[i-1];
}
int n,k=1;
while(cin>>n)
{
if(!n)break;
int t;
if(n==1||n==2){
cout<<"Case "<<k<<":"<<f
<<endl;k++;continue;
}
if(n%2!=0)
{

t=(f
+f[(n/2)])/2;
cout<<"Case "<<k<<":"<<t<<endl;
}
else
{
t=(f
+2*f[(n/2)-1]+f[n/2])/2;
cout<<"Case "<<k<<":"<<t<<endl;
}
k++;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: