• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            雁過無痕

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

            喝汽水問題

                                                              by flyinghearts

             

            1000瓶汽水,喝完后每3個空瓶能換1瓶汽水,問最后最多可以喝幾瓶汽水,此時剩余幾個空瓶?

             

             

            不妨假設,共有n瓶汽水,每a個空瓶能換b瓶汽水(a > b)。剛開始有n瓶汽水,喝完后就有n個空瓶,多喝的汽水是靠空瓶換來的,每進行一次空瓶換汽水,就能多喝b瓶汽水、空瓶數目就減少了a-ba個空瓶換了b瓶汽水,喝完后得到b個空瓶)。

             

            (下面 [x] 表示x的整數部分)

            1 如果允許從別處(老板或其他顧客處)借空瓶(當然,有借有還)

            空瓶換汽水次數:   [n / (a - b)]

            最后剩余空瓶:     n % (a - b)

            總共可以喝到汽水: n + [n / (a - b)] * b

             

            2 不允許借空瓶

             空瓶換汽水過程中,一但空瓶數小于a,則停止交換。

              n < a,顯然,空瓶換汽水次數為0,總共可以喝到汽水n瓶,最后剩余空瓶n

              n >= a:(下面提供三種解法)

              解法一    空瓶換汽水次數k等于滿足n – (a-b)*t < a的最小非負整數t:

                          t > (n-a)/(a-b),最小的t [(n-a)/(a-b)] + 1 = [(n-b)/(a-b)]

                          剩余的空瓶數:n – (a-b)*t

            = n – (a-b)*([(n-b)/(a-b)])

                                       = b + (n-b) - (a-b)*([(n-b)/(a-b)])

            = b + (n-b)%(a-b)

             

            解法二   先預留a個空瓶,將剩余的n-a個空瓶進行換汽水,換的過程中,若空瓶不夠a個,則從預留的a個空瓶中“借”,因而,

            空瓶換汽水次數:[(n-a)/(a-b)] + 1 = [(n-b)/(a-b)](預留的a個空瓶也能換一次)

            最后剩余空瓶: (n-b) % (a-b) + b(預留的a個空瓶換得b瓶汽水)

             

            解法三   最后一次空瓶換汽水得到的b瓶汽水,喝完后得到b個空瓶,因而最后剩余空瓶數必然大于b個,先預留b個空瓶,將剩余的n-b個空瓶進行換汽水,若空瓶不夠a個,則從預留的b個空瓶中“借”(由于能進行空瓶換汽水,空瓶數>= a – b,因而“借”完后,可以保證空瓶數大等于a),

                       空瓶換汽水次數:[(n-b)/(a-b)]

            最終剩余空瓶數:b + (n-b) % (a-b)

             

            (對解法三,n>=b時結論成立,對解法一、二,可以驗證n >=b時,結論也成立)

             

            因而, n >= b

            空瓶換汽水次數:   [(n-b)/(a-b)]

            最后剩余空瓶:     b + (n-b) % (a-b)

            總共可以喝到汽水: n + [(n-b)/(a-b)] * b

             

            對原題:

             n = 1000a = 3, b = 1 a – b = 2

             若允許借空瓶    

            可以喝到汽水: 1000 + 1000 / 2 = 1500

            剩余空瓶:1000 % 2 = 0

             

            若不允許借空瓶

            可以喝到汽水: 1000 + (1000 - 1) / 2 = 1499

            剩余空瓶:     1 + (1000 - 1) % 2 = 2

             

            posted on 2011-09-23 19:45 flyinghearts 閱讀(2908) 評論(7)  編輯 收藏 引用 所屬分類: 算法

            評論

            # re: 喝汽水問題 2011-09-23 20:16 cheap lace front wigs
            呵呵,這個算法相當有意思,學習了  回復  更多評論
              

            # re: 喝汽水問題 2011-09-23 20:19 飛舞的煙灰缸
            其實這個是小學三年級的奧賽題,我那時候就做過。不過現在重新做這個題目花的時間比小時候還多,唉。  回復  更多評論
              

            # re: 喝汽水問題 2011-09-24 01:25 Archen
            我就是做了漫畫那家伙 我覺得你有點想的過于復雜。
            汽水兌換本質上找汽水內容和瓶子的兌換比
            由條件可以知道,一空瓶=b/(a-b)汽水
            能借的話等于兌換不設條件,所以n瓶汽水=n空瓶+n汽水=n*b/(a-b)汽水+n
            不能借的話起碼剩一個空瓶,那么n瓶汽水=(n-1)空瓶+n汽水=(n-1)*b/(a-b)+n,結果取整即可  回復  更多評論
              

            # re: 喝汽水問題 2011-09-24 09:47 cheap lace front wigs
            @Archen 正解!
              回復  更多評論
              

            # re: 喝汽水問題 2011-09-24 20:27 flyinghearts
            @Archen
            不能借的話,最后至少剩下b個空瓶,而不是1個。
            你可能沒注意到,你我得到的答案都不一樣。

            利用“飲料和空瓶的價值比”的計算結果,在b>1時可能不正確。

            比如說,5個空瓶可以換2瓶汽水,
            開始有5瓶水,則無論是否可以借瓶,最多只能喝7瓶汽水
            開始有6瓶水,不能借瓶的話,最多只能喝8瓶水。
              回復  更多評論
              

            # re: 喝汽水問題 2012-05-21 16:49 啊啊啊
            把汽水分成空瓶子和飲料2個部分;
            1瓶汽水 = 1個空瓶子(空瓶子) + 1瓶子容量的汽水(飲料)

            因為: 3瓶汽水 = 3空瓶子 + 3份飲料 = 1瓶汽水 + 3份飲料
            所以: 2瓶汽水 = 3份飲料 即 1瓶汽水 = 1.5份飲料
            現有1000瓶汽水,所以可以喝到的飲料是 1.5份飲料X1000瓶汽水 = 1500份飲料

            因為最后得出的是整數,所以不用再算了,如果不是整數,則可以退一瓶。
              回復  更多評論
              

            # re: 喝汽水問題 2012-05-29 19:56 flyinghearts
            @啊啊啊

            又一個不認真看帖就回帖的。

            先不說 “價值法”是不是正確的,你覺得“列一個方程再推出結果” 與 “不列方程直接得出結果” 哪一種方法更容易理解?

            再說下“價值法”,“價值法”要得出正確結果,就必須“耍點無賴”:

            1 必須能借到空瓶, 不然 3空瓶換1汽水時,開始有2瓶汽水時,得到的不是正確答案。

            2 若6空瓶能換2汽水,則要求 3空瓶一定能換到1汽水,不然在開始有2瓶汽水時,計算得到的不是正確答案。(網上的題目,都是n空瓶能換1汽水,所以不存在這個問題)

            在實際兌換中,極有可能這兩個條件都不能滿足。










              回復  更多評論
              

            色婷婷久久综合中文久久蜜桃av| 三级三级久久三级久久 | 久久精品国产亚洲av瑜伽| 国产精品一区二区久久不卡| 99久久综合狠狠综合久久止| 国产精品久久久久一区二区三区| 久久无码一区二区三区少妇| 日韩精品久久无码人妻中文字幕 | 狠狠色伊人久久精品综合网| 欧美激情精品久久久久久久九九九| 久久精品国产免费观看三人同眠| 久久精品无码专区免费青青| 亚洲国产成人精品91久久久| 国产亚洲色婷婷久久99精品| 伊人久久大香线蕉综合5g | 精品久久久无码中文字幕| 亚洲伊人久久大香线蕉综合图片| 成人a毛片久久免费播放| 狠狠色婷婷久久一区二区| 久久99精品国产麻豆不卡| 热re99久久精品国99热| 精品久久久久成人码免费动漫| 99久久精品国内| 久久精品国产久精国产思思 | 一级女性全黄久久生活片免费| 久久精品一区二区国产| 色偷偷88888欧美精品久久久| 香蕉久久夜色精品国产尤物| 国产精品美女久久久免费| 99久久免费国产精品热| 精品国际久久久久999波多野 | 热久久国产精品| 国产精品一区二区久久不卡| 久久国产热精品波多野结衣AV| 久久国产AVJUST麻豆| 亚洲人成无码www久久久| 久久青草国产精品一区| 久久久久一区二区三区| 国产成人精品久久一区二区三区| 久久久久人妻精品一区| 99久久中文字幕|