python学习-综合练习五(五人分鱼(优化解)、顺向、反向推导)
文章目錄
- 五人分魚
- 順推
- 反推
說明:本篇博文的知識點大部分來自 Python3 實例
五人分魚
# A、B、C、D、E 五人在某天夜里合伙去捕魚,到第二天凌晨時都疲憊不堪,于是各自找地方睡覺。 # 日上三桿,A 第一個醒來,他將魚分為五份,把多余的一條魚扔掉,拿走自己的一份。 # B 第二個醒來,也將魚分為五份,把多余的一條魚扔掉拿走自己的一份。 。 # C、D、E依次醒來,也按同樣的方法拿魚。 # 問他們臺伙至少捕了多少條魚?題干分析:
拿到這種題,如果手動計算,首先想到的是列方程,求解。但是在程序中,那我們能做的其實就是控制循環,然后不斷的進行遍歷,選出符合條件的數值。
比如這道題,其實有兩條思路,第一條思路是順推,按照A->E的順序拿魚。第二條思路就是反推,按照E->A的順序拿魚計算。
順推
主要是理清思路比較麻煩,代碼還是挺簡單的。
控制一個循環,不斷讓數值fish +=1,然后循環里面一個for去判斷5次,每次都是fish -1對5取余等于0。找到這個數,跳出循環,打印出來的數值就是我們需要的數值。
然后我們遍歷,并不是每一個數值都要去遍歷,我們只對 (total - 1) % 5 == 0 的數值去進行計算,即在循環里面,可以直接使用 idx * 5 + 1之后的fish進行計算。
·
減少了循環次數,使用傳統方式,每個idx進行計算,遍歷了3121次,而使用處理后的fish進行計算,只循環了624次。
·
由此可見,如果循環里面是復雜計算,這個耗時差距就會很大了。
下面看代碼:
運行結果:
反推
這種題還有一種反向思維,即從最后一個人能分到的最少魚數,反向推導。
但是我寫了一段代碼,運行處理結果不對,我還需要調試一下。等我調試好,再把這里補充完整,如果有看到此部分,然后對反向推導有興趣的小伙伴,可以把代碼貼到評論區噢。
在此對文章內容進行補充:
參考文章為:
創新工廠面試題詳解:共打了多少魚 – 正解 遞歸求解法
這里有很多干貨,并且針對這道題,有一句話很重要:
這道題有簡單的數學解: X = 5^5 - (5-1);
這個確實很有意思,大家思考一下噢。
總結
以上是生活随笔為你收集整理的python学习-综合练习五(五人分鱼(优化解)、顺向、反向推导)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习-综合练习四(最大公约数
- 下一篇: 华硕 ROG Phone 7 系列手机没