• <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汽水,所以不存在這個問題)

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










              回復  更多評論
              

            亚洲国产精品久久久久久| 久久永久免费人妻精品下载| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 无码专区久久综合久中文字幕 | 久久无码专区国产精品发布| 99久久精品国产高清一区二区| 中文国产成人精品久久不卡 | 一级做a爱片久久毛片| 久久精品无码专区免费| 久久久久亚洲精品日久生情| 国产成人久久久精品二区三区| 久久综合给久久狠狠97色| 精品久久综合1区2区3区激情| 亚洲精品国精品久久99热| 久久国产精品免费一区| 精品无码久久久久国产| 日本久久久久久中文字幕| 色综合久久中文字幕综合网| 久久中文字幕人妻丝袜| 日韩人妻无码精品久久久不卡 | 久久久久波多野结衣高潮| 中文字幕无码久久久| 国产一级做a爰片久久毛片| 99久久超碰中文字幕伊人| 99久久99久久| 色综合久久无码中文字幕| 久久久久18| 久久久久久无码国产精品中文字幕 | 欧美一级久久久久久久大| 久久最近最新中文字幕大全| 久久综合精品国产二区无码| 一本色综合网久久| 天天爽天天狠久久久综合麻豆| av无码久久久久不卡免费网站| 久久丝袜精品中文字幕| 久久精品国产亚洲AV忘忧草18 | 亚洲午夜无码久久久久| 国产精品9999久久久久| 久久精品国产2020| 欧美精品福利视频一区二区三区久久久精品| 久久毛片一区二区|