換水瓶

問題描述:
假設(shè)1元錢買一瓶水,三個(gè)空瓶可以換一瓶水。初始n元最終可以喝到幾瓶水?

初步思路:
1、利用遞推的思想,將現(xiàn)有空瓶可兌換的瓶數(shù)加上余下的空瓶數(shù)作為新的空瓶數(shù)進(jìn)行下一步計(jì)算,直到新的空瓶數(shù)小于3時(shí)停止。
2、每三個(gè)空瓶可以得到一瓶水和一個(gè)空瓶,也就是說每兩個(gè)空瓶可以使喝到的水+1,因此可以得出遞推公式: bottle(n) = 1 + bottle(n - 2) ,n > 2
3、由遞推公式易知每兩個(gè)空瓶可得1瓶水,因此整理后可得到通用計(jì)算公式:
\left\{\begin{array}{} n + n//(m-1)-1, & n \space mod \space 2=0\\ n + n//(m-1), & n \space mod \space 2=1\ \end{array}\right.其中http://表示整除,mod表示取余

代碼如下:

def buy_water(n):
    # 遞推實(shí)現(xiàn)
    num = n
    empty = num
    while True:
        if empty < 3:
            break
        num += empty // 3
        empty = empty // 3 + empty % 3
    return num


def buy_water_(n):
    # 空瓶換水遞推
    def exchange(x):
        if x < 3:
            return 0
        else:
            return 1 + exchange(x - 2)

    return n + exchange(n)


def buy_water_formula(n):
    # 公式實(shí)現(xiàn)
    if n % 2 == 0 and n != 0:
        return n + n // (3 - 1) - 1
    else:
        return n + n // (3 - 1)


if __name__ == '__main__':
    print(buy_water(30))
    print(buy_water_(30))
    print(buy_water_formula(30))
    # all out 44
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 上一次給你們安利了貴州,今天想推薦一個(gè)距離貴州很近、適合短途旅行的網(wǎng)紅城市,霧都重慶。 如果你還沒去過重慶,你對(duì)重...
    流浪攝影師閱讀 7,367評(píng)論 46 189
  • 那天,我閉目盤坐于高崗之上,崗峰破云,頭頂藍(lán)天甚是清明。 周身群峰聳立,云霧中峰頂若隱若現(xiàn),一輪紅...
    書香自華閱讀 562評(píng)論 2 0
  • 今天繼續(xù)制作復(fù)習(xí)課件,絕對(duì)原創(chuàng),但還有修改的空間,繼續(xù)琢磨吧。只是覺得這學(xué)期要是每節(jié)課都如此上法的話,好累。 心中...
    我在棗快樂呀閱讀 242評(píng)論 1 4

友情鏈接更多精彩內(nèi)容