Test Message

d212: 東東爬階梯

內容

東東有個嗜好,爬階梯不是一次走一階,就是一次走兩階。

換句話說,假設階梯有三階,那他有三種走法

一:第一步走一階,第二步走二階。

二:第一步走二階,第二步走一階。

三:全程都走一階。

這題要問你,假設階梯有 n 階,那東東有幾種走法?


輸入

第一行有一個正整數 n,0<n<100,表示階梯有 n 階。

1
2
5

輸出

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

1
2
8


解題思路

c547 同一題,本題沒有使用 MOD 運算,因此最後幾項即使使用 unsigned long long 存也會溢位,這邊可以用萬進制的想法開另一個陣列去存進位的值,輸出時判斷是否有進位到新陣列來選擇不同的格式輸出即可。


完整程式碼

AC (1ms, 60KB)
#include <stdio.h>
#define SIZE 100
#define MAX 10000000000000000000ULL

unsigned long long list[SIZE] = { 1, 1 };
int list2[SIZE];

int main()
{
int n;
for (int i = 2; i < SIZE; i++)
{
list[i] = list[i - 1] + list[i - 2];
list2[i] = list2[i - 1] + list2[i - 2];
if (list[i] >= MAX)
list[i] -= MAX, list2[i]++;
}
while (scanf(" %d", &n) == 1)
{
if (list2[n]) printf("%d%012llu\n", list2[n], list[n]);
else printf("%llu\n", list[n]);
}
return 0;
}