程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言-數學-統計問題(Hdu 2563)

C語言-數學-統計問題(Hdu 2563)

編輯:關於C語言

C語言-數學-統計問題(Hdu 2563)


Problem Description 在一無限大的二維平面中,我們做如下假設:
1、 每次只能移動一格;
2、 不能向後走(假設你的目的地是“向上”,那麼你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、 走過的格子立即塌陷無法再走第二次;

求走n步不同的方案數(2種走法只要有一步不一樣,即被認為是不同的方案)。

Input 首先給出一個正整數C,表示有C組測試數據
接下來的C行,每行包含一個整數n (n<=20),表示要走n步。

Output 請編程輸出走n步的不同方案總數;
每組的輸出占一行。

Sample Input
2
1
2


這裡我們始終定義前為正方向.
我們用 a [ i ] 表示朝前走i步的種類,我們用 b [ i ] 表示朝左(右)走 i 步的種類, 顯然 a [ 1 ] = 3,b [ 1 ] = 2;
然後分治的思想: 向前走 i 步(i>1)的種類相當於向前走 i-1 步的種類加上向左、向右走 i-1 步的種類. 數學式子表示就是: a [ i ] = a [ i-1 ]+2*b [ i-1 ]; 向左(向右)走 i 步(i>1)的種類相當於向前走 i-1 步的種類加上向右(向左)走 i-1 步的種類. 數學式子表示就是: b [ i ] = a [ i-1 ]+b [ i-1 ];
然後遞推可得.

代碼如下:
#include 
int main()
{
    int a[21]={0,3},b[21]={0,2},i;
    for(i=2;i<21;i++)
    {
        b[i]=a[i-1]+b[i-1];
        a[i]=a[i-1]+2*b[i-1];
    }
    int m,N;
    scanf("%d",&N);
    while(N--)
    {
        scanf("%d",&m);
        printf("%d\n",a[m]);
    }
    return 0;
}




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