日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

hdu 2013 蟠桃记-递推-[解题报告]C++

發(fā)布時(shí)間:2025/6/15 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 2013 蟠桃记-递推-[解题报告]C++ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

蟠桃記

問(wèn)題描述 :

喜歡西游記的同學(xué)肯定都知道悟空偷吃蟠桃的故事,你們一定都覺(jué)得這猴子太鬧騰了,其實(shí)你們是有所不知:悟空是在研究一個(gè)數(shù)學(xué)問(wèn)題!
什么問(wèn)題?他研究的問(wèn)題是蟠桃一共有多少個(gè)!
不過(guò),到最后,他還是沒(méi)能解決這個(gè)難題,呵呵^-^
當(dāng)時(shí)的情況是這樣的:
第一天悟空吃掉桃子總數(shù)一半多一個(gè),第二天又將剩下的桃子吃掉一半多一個(gè),以后每天吃掉前一天剩下的一半多一個(gè),到第n天準(zhǔn)備吃的時(shí)候只剩下一個(gè)桃子。聰明的你,請(qǐng)幫悟空算一下,他第一天開(kāi)始吃的時(shí)候桃子一共有多少個(gè)呢?

輸入:

輸入數(shù)據(jù)有多組,每組占一行,包含一個(gè)正整數(shù)n(1<n<30),表示只剩下一個(gè)桃子的時(shí)候是在第n天發(fā)生的。

輸出:

輸入數(shù)據(jù)有多組,每組占一行,包含一個(gè)正整數(shù)n(1<n<30),表示只剩下一個(gè)桃子的時(shí)候是在第n天發(fā)生的。

樣例輸入:

2 4

樣例輸出:

4 22

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2013


迭代的方法很簡(jiǎn)單,直接按題目意思來(lái)就可以了。

<span style="font-size:18px;">for (s = n = 1; n &amp;lt; 30; n++)s = (s + 1) * 2;</span>

<span style="font-size:18px;"><br /></span>

<span style="font-size:18px;"><br /></span>

計(jì)算機(jī)的鼻祖本來(lái)就是數(shù)學(xué)家,自然優(yōu)化程序的最終方法還是要回歸到數(shù)學(xué)上。
本題很容易得到它的遞推方程:

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

對(duì)于這種推斷題還有另外一種遞推方法,雖然對(duì)于本題來(lái)說(shuō)很麻煩。但有時(shí)候它是無(wú)可替代的。

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];設(shè) 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 - 4f(2) + f(1) = 9 - 4把①式減去②式得f(n) = 9 × 2n-3 + f(n-2)f(n-2) = 9 × 2n-5 + f(n-4)┋

這時(shí)候,我們需要分類(lèi)討論了:

  • n為奇數(shù)

    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為偶數(shù)

    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
  • 世上的事往往如此,巧合的事情經(jīng)常發(fā)生。不得不感嘆大自然的美妙~
    現(xiàn)在我們就得到了這道題目的公式了: f(n) = 3 × 2n – 1?– 2

    01 #include <math.h>
    02 #include <stdio.h>
    03 ?
    04 int?main(void)
    05 {
    06 ????int?n;
    07 ?
    08 ????while?(scanf("%d", &n) != EOF)
    09 ????????printf("%.0f\n", 3 *?pow(2, n - 1) - 2);
    10 ?
    11 ????return?0;
    12 }

    《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的hdu 2013 蟠桃记-递推-[解题报告]C++的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。