我是 12 樓的, 有甚麽不對呀. (剛才打錯了,)
一個正整數 y,
第一次 y / n, 再減去 k, 得到 r1
第二次 r1 / n, 再減去 k, 得到 r2
第三次 r2 / n, 再減去 k, 得到 r3
...
..
第m 次 r[m-1] / n, 再減去 k, 最終剩餘 rm
在這個問題中, y 是要求的總數, k 是已知的 1, m 是已知的 10, rm(最終剩餘的)是已知的 1
即 求 y, k=1, m=10, r=1
通用公式 y = (a1 - a1 * (n ^ (m-1))) / (1 - n) + rm
其中 a1 = (rm + k) * n - k
對於猴子問題, a1 = (1 + 1) * 2 - 1 = 3
==========================================
==========================================
==========================================
[問題擴展]:
一個猴子吃桃子, 第 1 天吃了桃子總數的 1/n 再多 k 個,
第 2 天又吃了剩下的 1/n 再多 k 個,
...
...
..
第 m 天後, 桃子還剩下 rm 個
求這堆桃子有幾個??
[解答]
設桃子總數爲 y, 第 (m - 1) 天吃的爲 a1
第m 天沒吃, 所以 a1 = (rm + k) * n - k
則 y = (a1 - a1 * (n ^ (m-1))) / (1-n) + rm
[程式解答]
void main(void)
{
int y; // 總數 (未知)
int a1; // 第 m-1 天吃的數量 (未知, 易求得)
int rm; // 剩餘數量 (已知)
int n; // 每次吃的百分比, 如果吃 1/2, 則 n=2; 如果吃 1/3, 則 n=3....... (已知)
int k; // 每次多吃的個數
int m; // 第幾天 (已知)
printf("輸入最後剩餘的數量:");
scanf("%d", &rm);
printf("輸入每次吃的百分比, 1/2 爲 2, 1/3 爲 3, ...:");
scanf("%d", &n);
printf("輸入每次多吃的個數:");
scanf("%d", &k);
printf("輸入現在是第幾天:");
scanf("%d", &m);
a1 = (rm + k) * n - k;
if(((a1+k) % n)!=0)
{
printf("輸入不合理.");
system("PAUSE");
return;
}
y = (a1 - a1 * pow(n, (m-1))) / (1-n) + rm;
printf("\n這堆桃子共有 %d 個.", y);
system("PAUSE");
}
-----
執行示例:
輸入 1
2
1
10
輸出 1534
========
我還是認爲這是一個等比數列求和的問題~~~
[此贴子已经被作者于2006-7-28 13:28:07编辑过]