東東有個嗜好,爬階梯不是一次走一階,就是一次走兩階。
換句話說,假設階梯有三階,那他有三種走法
一:第一步走一階,第二步走二階。
二:第一步走二階,第二步走一階。
三:全程都走一階。
這題要問你,假設階梯有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
不好意思打擾 請問一下
回覆刪除第n階
是n-1跟n-2階的和?
對
回覆刪除不好意思 我是要問
回覆刪除為什麼
第n階
是n-1跟n-2階的和?
p.s.新年快樂~~
我舉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--->1 1 2 (多2)=>從2
--->2 2 (多2)
--->1 2 1 (多1)=>從3
--->1 1 1 1 (多1)
--->2 1 1 (多1)
懂了 謝謝:)
如果我想知道全部的順序怎麼寫?
回覆刪除就是我想輸出到螢幕上,11111,1112....這樣
我把程式碼貼在文章下方
回覆刪除