一维数组
老生常谈的斐波那契数列。 1 1 2 3 5 8 13 21 ....
编写一个函数,输入n,返回第n个数(n <= 50)。(实测当 n = 47 爆int)
1 2 3 4 5 6 7 8 9 10 11 12 13
| LL fib(int n) { LL fibnacci[55]; fibnacci[0] = fibnacci[1] = 1; if (n == 0 || n == 1) return 1;
for (int i = 2; i <= n; i++) fibnacci[i] = fibnacci[i - 1] + fibnacci[i - 2];
return fibnacci[n]; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
LL fib(int n) { LL fibnacci[3]; fibnacci[0] = fibnacci[1] = 1;
if (n == 0 || n == 1) return 1;
while (n - 1) { n--; fibnacci[2] = fibnacci[0] + fibnacci[1]; fibnacci[0] = fibnacci[1]; fibnacci[1] = fibnacci[2]; }
return fibnacci[2]; }
|
二维数组
递推关系f[i][j] = f[i - 1][j] + f[i - 1][j - x]
(其中 x
> 0)
编写一个函数,输入a,b,输出f[a][b]。(i, j <= 50)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
int f[50][50], x = 2;
void init() { for (int i = 0; i < 50; i++) f[0][i] = 1; }
int func(int a, int b) { init(); for (int i = 1; i <= a; i++) for (int j = 1; j <= b; j++) if (j >= x) f[i][j] = f[i - 1][j] + f[i - 1][j - x]; return f[a][b]; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
int f[2][50];
void init() { for(int i = 0; i < 50; i++) f[0][i] = 1; }
int func(int a, int b) { init(); for (int i = 1; i <= a; i++) { for (int j = 0; j < 50; j++) f[i % 2][j] = 0; for (int j = 1; j <= b; j++) if (j >= x) f[i % 2][j] = f[1 - i % 2][j] + f[1 - i % 2][j - x]; } return f[a % 2][b]; }
|