程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> bnu條形碼設計(遞推)

bnu條形碼設計(遞推)

編輯:C++入門知識

題目鏈接:bnu4064

/*
    首先不考慮對稱,遞推公式:f[n] = f[n-1] + 2*f[n-2];
即n-1的情況加上一個豎條,n-2的情況加上一個2*2的或兩個橫條
    接著考慮有多種是對稱的,n為奇數時:s[n] = f[n/2];  n為偶數時:s[n] = f[n/2] + f[n/2-1]*2;
即(中間是一塊2*2的,或兩個橫條,或沒有);
    f[n] = 2*不對稱的種數+s[n];
*/
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
int f[30] = {0,1,3};
int s[30] = {0,1,3};
int main()
{
    int n,i,j;
    for(i = 3; i <= 28; i ++)
    {
        f[i] = f[i-1] + 2*f[i-2];
        if(i&1)
            s[i] = f[i/2];
        else
            s[i] = f[i/2] + f[i/2-1]*2;
    }
    int p = 1;
    while(scanf("%d",&n),n)
    {
        printf("Case %d:%d\n",p++,(f[n]+s[n])/2);
    }
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved