• <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 閱讀(2920) 評論(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国产精品一区二区| 9999国产精品欧美久久久久久| 久久国产亚洲精品麻豆| 久久综合九色综合久99| 亚洲国产另类久久久精品| 一本大道久久a久久精品综合| 久久精品成人免费观看97| 久久久亚洲裙底偷窥综合| 青青草国产成人久久91网| 青草久久久国产线免观| 人妻久久久一区二区三区| 国産精品久久久久久久| 久久久一本精品99久久精品88| 国内精品久久久久久久97牛牛| 色综合久久久久综合99| 亚洲国产精品久久久久婷婷软件 | 人妻无码中文久久久久专区| 99久久国产热无码精品免费久久久久 | 久久强奷乱码老熟女| 91精品国产91久久综合| 欧美成人免费观看久久| 久久国产精品一区| 国产精品久久久久9999| 久久精品亚洲日本波多野结衣| 深夜久久AAAAA级毛片免费看| 91久久九九无码成人网站| 奇米综合四色77777久久| 久久笫一福利免费导航 | 伊人久久大香线焦AV综合影院| 久久国产精品偷99| 66精品综合久久久久久久| www.久久热.com| 色偷偷久久一区二区三区| 蜜桃麻豆WWW久久囤产精品| 久久久久99这里有精品10 | 伊人久久精品影院| 伊人久久大香线蕉综合5g| 亚洲午夜福利精品久久 |