1. 程式人生 > 其它 >第42期-猴子分桃

第42期-猴子分桃

1 問題描述

海灘上有一堆桃子,五隻猴子來分。第一隻猴子把這堆桃子平均分為五份,多了一個,這隻猴子把多的一個扔入海中,拿走了一份。
第二隻猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,
第三、第四、第五隻猴子都是這樣做的,問海灘上原來最少有多少個桃子?
用python解決這個數學難題吧!

2 解題思路

  • 第一步:五次相同的動作,for迴圈
  • 第二步:由於不確定最後的桃子數量,所以需要使用while迴圈來嘗試,直到滿足條件為止

3 解題方法

n = 1
while True:
    try:
        b = n
        for i in range(5):
            
assert (b - 1) % 5 == 0 b = (b - 1) / 5 * 4 break except: n += 1 print(n)
View Code

第1行:定義初始桃子數量為n並賦值為1
第2行:從n=1開始嘗試,無限迴圈知道滿足條件
第3、9-10行:使用try、except語句,若滿足條件則結束迴圈,不滿足條件則報錯並讓n+1進行下次迴圈
第4行:定義變數b並將n的值賦值給b,這樣可以不改變原本n的值
第5行:for迴圈遍歷五次
第6行:assert函式判斷丟掉一個桃子後剩下的桃子是否可以被平分,是則繼續下一步,否則報錯進入except語句
第7行:給b賦值拿走五分之一桃子後剩餘的桃子數量
第8行:五次迴圈過後表示這個數符合題意,結束迴圈
第11行:列印桃子數量

程式碼執行結果為:

小思考

這裡用到了for、except語句與assert函式結合的方式,簡單講解一下:
for、except語句在第四十期已經講解過,try裡面的內容如果報錯,就會停止執行進入except後面的語句中
而assert函式會判斷後面語句是否為True,若為False則報錯
兩者配合效果會意想不到,後面咱們會經常遇到