問題描述 :
喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知:悟空是在研究乙個數學問題!
什麼問題?他研究的問題是蟠桃一共有多少個!
不過,到最後,他還是沒能解決這個難題,呵呵^-^
當時的情況是這樣的:
第一天悟空吃掉桃子總數一半多乙個,第二天又將剩下的桃子吃掉一半多乙個,以後每天吃掉前一天剩下的一半多乙個,到第n天準備吃的時候只剩下乙個桃子。聰明的你,請幫悟空算一下,他第一天開始吃的時候桃子一共有多少個呢?
輸入:
輸入資料有多組,每組佔一行,包含乙個正整數n(1輸出:
輸入資料有多組,每組佔一行,包含乙個正整數n(1樣例輸入:
2樣例輸出:4
422
迭代的方法很簡單,直接按題目意思來就可以了。
計算機的鼻祖本來就是數學家,自然優化程式的最終方法還是要回歸到數學上。for (s = n = 1; n < 30; n++)s = (s + 1) * 2;
本題很容易得到它的遞推方程:
於是我們得到:f(1) = 1;f(n) = [f(n-1) + 1] × 2;
對於這種推斷題還有另外一種遞推方法,雖然對於本題來說很麻煩。但有時候它是無可替代的。f(n) + 2 = 2 × [f(n-1) + 2]f(1) + 2 = 3
=>
f(n) + 2 = 3 × 2n-1
=>
f(n) = 3 × 2n-1 - 2
這時候,我們需要分類討論了:f(1) = 1;f(n) = 2f(n-1) + 2 = f(n-1) + 2f(n-2) + 4;
=>
f(n) + f(n-1) + 4 = 2 × [f(n-1) + f(n+2) + 4];
設 g(n) = f(n) + f(n-1) + 4;
則 g(n) = 2 × g(n-1);
g(2) = f(2) + f(1) + 4 = 9;
∴g(n) = 9 × 2n-2 (n > 1)
∴f(n) + f(n-1) = 9 × 2n-2 - 4 ①
f(n-1) + f(n-2) = 9 × 2n-3 - 4 ②
┋ f(3) + f(2) = 9 × 2 - 4
f(2) + f(1) = 9 - 4
把①式減去②式得
f(n) = 9 × 2n-3 + f(n-2)
f(n-2) = 9 × 2n-5 + f(n-4)
┋
n為奇數
f(n) = 9 × 2n-3 + f(n-2)f(n-2) = 9 × 2n-5 + f(n-4)
┋ f(5) = 9 × 22 + f(3)
f(3) = 9 + f(1)
f(1) = 1
從下往上迭代,得:
f(n) = 9 × (2n-3 + 2n-5 + ... + 22 + 1) + 1
=>
f(n) = 9 × (1 - 4(n-1)/2) ÷ (1 - 4) + 1
=>
f(n) = 3 × 2n - 1 - 2
n為偶數
f(n) = 9 × 2n-3 + f(n-2)f(n-2) = 9 × 2n-5 + f(n-4)
┋ f(4) = 9 × 21 + f(2)
f(2) = 4
從下往上迭代,得:
f(n) = 9 × (2n-3 + 2n-5 + ... + 21) + 4
=>
f(n) = 9 × 2 × (1 - 4(n-2)/2) ÷ (1 - 4) + 4
=>
f(n) = 3 × 2n - 1 - 2
世上的事往往如此,巧合的事情經常發生。不得不感嘆大自然的美妙~
現在我們就得到了這道題目的公式了: f(n) = 3 × 2n – 1 – 2
01
#include
02
#include
03
04
int
main(
void
)
05
遞推遞迴 I 蟠桃記
題目 description 孫悟空在大鬧蟠桃園的時候,第一天吃掉了所有桃子總數一半多乙個,第二天又將剩下的桃子吃掉一半多乙個,以後每天吃掉前一天剩下的一半多乙個,到第n天準備吃的時候只剩下乙個桃子。這下可把神仙們心疼壞了,請幫忙計算一下,第一天開始吃的時候一共有多少個桃子?input 輸入資料有多...
杭電 2013 蟠桃記
problem description 喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知 悟空是在研究乙個數學問題!什麼問題?他研究的問題是蟠桃一共有多少個!不過,到最後,他還是沒能解決這個難題,呵呵 當時的情況是這樣的 第一天悟空吃掉桃子總數一半多乙個...
蟠桃記(杭電2013)
蟠桃記 problem description 喜歡西遊記的同學肯定都知道悟空偷吃蟠桃的故事,你們一定都覺得這猴子太鬧騰了,其實你們是有所不知 悟空是在研究乙個數學問題!什麼問題?他研究的問題是蟠桃一共有多少個!不過,到最後,他還是沒能解決這個難題,呵呵 當時的情況是這樣的 第一天悟空吃掉桃子總數一...