校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
2333这道题和万杰讨论出来的^_^。找递推,分n为奇数或偶数奇数一种情况,偶数两种情况,递推中间分开讨论。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<math.h> int d[100],b[100]; int i,j,n; int main() { d[0]=0; d[1]=1; d[2]=3; d[3]=5; b[0]=0; b[1]=1; b[2]=3; b[3]=1; for(i=3;i<=28;i++) { d[i]=d[i-1]+d[i-2]*2; if(i%2!=0) { b[i]=d[(i-1)/2]; } if(i%2==0) { b[i]=d[i/2]+d[(i-2)/2]*2; } } i=1; while(scanf("%d",&n)!=EOF&&n!=0) { j=(d[n]+b[n])/2; printf("Case %d:%d ",i++,j); } return 0; }