東東有個嗜好,爬階梯不是一次走一階,就是一次走兩階。
換句話說,假設階梯有三階,那他有三種走法
一:第一步走一階,第二步走二階。
二:第一步走二階,第二步走一階。
三:全程都走一階。
這題要問你,假設階梯有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....這樣
我把程式碼貼在文章下方
回覆刪除