題目:蜜蜂從 a 飛到 b(a < b < 50),只能向前飛 1 或 2 步,求路徑數。本質是斐波那契:f(n) = f(n-1) + f(n-2),f(1)=1, f(2)=2。
unsigned long long ways(int n) {
if (n == 1) return 1;
if (n == 2) return 2;
unsigned long long a = 1, b = 2, c;
for (int i = 3; i <= n; i++) {
c = a + b; a = b; b = c;
}
return b;
}
| 類型 | 最大值 | 適用範圍 |
|---|---|---|
| int | 2.1e9 | f(45) 溢出 |
| unsigned int | 4.2e9 | f(46) 溢出 |
| unsigned long long | 1.8e19 | 覆蓋 f(93),本題 n<50 綽綽有餘 |