第 10 天早剩 1 個。第 n 天早剩 x_n,則第 n-1 天早 x_{n-1} = 2*(x_n + 1)。
int peach(int days) {
int x = 1;
for (int d = days; d > 1; d--) x = 2*(x+1);
return x;
}
// 10 天 -> 1534
高度 100m,每次彈回一半。第 10 次落地總路程、第 10 次彈高。
void ball(int n) {
double h = 100, total = 0;
for (int i = 1; i < n; i++) {
total += h; // 落下
h /= 2;
total += h; // 彈起
}
total += h; // 第 n 次落下
printf("總路程: %.4f\n第%d次彈高: %.4f\n", total, n, h/2);
}
// n=10 -> 總路程 299.6094, 彈高 0.0977
分子分母皆為費波那契數列:a_{n+1} = a_n + b_n, b_{n+1} = a_n。
double fib_frac_sum(int n) {
double a = 2, b = 1, sum = 0;
for (int i = 1; i <= n; i++) {
sum += a / b;
double t = a;
a = a + b;
b = t;
}
return sum;
}
// n=20 -> 32.660261
long long fib(int n) {
long long a = 0, b = 1;
while (n--) { long long t = a+b; a = b; b = t; }
return a;
}