2011年6月21日 星期二

d212: 東東爬階梯

內容 :
    東東有個嗜好,爬階梯不是一次走一階,就是一次走兩階。
    換句話說,假設階梯有三階,那他有三種走法
    一:第一步走一階,第二步走二階。
    二:第一步走二階,第二步走一階。
    三:全程都走一階。
    這題要問你,假設階梯有n階,那東東有幾種走法?

輸入說明 :
    第一行有一個正整數n,0<n<100,表示階梯有n階。

輸出說明 :
    請輸出n個階梯有幾種走法。

範例輸入 :
1
2
5

範例輸出 :
1
2
8

程式碼 :
#include <stdio.h>

int main() 
{
    int i,n;
    long long arr[101];
    
    arr[1] = 1;
    arr[2] = 2;
    
    for(i=3;i<100;i++)
        arr[i] = arr[i-1] + arr[i-2];
    
    while(scanf("%d",&n)==1)
        printf("%lld\n",arr[n]);
    
    return 0;
}

印出所有情況的程式碼 :
#include<stdio.h>

int n,map[100];

void DFS(int sum, int step)
{
    if(sum == n)
    {
        for(int i=0; i<step; i++)
            printf("%d",map[i]);
        printf("\n");
        return;
    }
    else if(sum > n)
        return;
    
    map[step] = 1;
    DFS(sum+1, step+1);
    
    map[step] = 2;
    DFS(sum+2, step+1);
}

int main()
{
    int sum, step;
    
    while(scanf("%d",&n)==1)
    {
        sum = 0;
        step = 0;
        DFS(sum, step);
    }
        
    return 0;
}


http://zerojudge.tw/ShowProblem?problemid=d212

7 則留言:

  1. 不好意思打擾 請問一下
    第n階
    是n-1跟n-2階的和?

    回覆刪除
  2. 不好意思 我是要問
    為什麼
    第n階
    是n-1跟n-2階的和?

    p.s.新年快樂~~

    回覆刪除
  3. 我舉3的例子
    我們知道
    (左邊是樓梯數,右邊是怎麼走)
    1 ->1

    2 ->1 1
    --->2
    那3階,如果我們慢慢列
    3 ->1 1 1
    --->1 2
    --->2 1
    如果換個順序
    3 ->1 2
    --->1 1 1
    --->2 1
    請看3階的答案的最右邊的數字!!
    第一個答案是不是1階的答案加"2"( 1 "2")
    第二個和第三個答案是不是2階的答案加"1"(1 1 "1")(2 "1")
    由此可知,4階的答案 = 2階的答案加"2" + 3階的答案加"1"
    所以,4階的答案數 = 2階的答案數 + 3階的答案數
    以下以此類推
    (如果看不懂說一下,我會再舉4階,謝謝)

    回覆刪除
  4. 如果是4個話 是不是這樣

    4--->1 1 2 (多2)=>從2
    --->2 2 (多2)
    --->1 2 1 (多1)=>從3
    --->1 1 1 1 (多1)
    --->2 1 1 (多1)

    懂了 謝謝:)

    回覆刪除
  5. 如果我想知道全部的順序怎麼寫?
    就是我想輸出到螢幕上,11111,1112....這樣

    回覆刪除
  6. 我把程式碼貼在文章下方

    回覆刪除