演算法內有很多套路,比如,二分法,二叉樹法,迴圈迭代法,氣泡排序法,暴力破解法等等各種各樣的演算法,這些演算法針對不同的模型,模型就先不解釋了,我們今天主要討論的是暴力破解法也稱作窮舉法,這種演算法相當對得起它的名字,因為暴力所以相對簡單,適用人群是喜歡暴力的,簡單的人群,但可能不是最高效的。簡單來說,優點:此演算法簡單,暴力,效果直觀,缺點:執行效率較低,對記憶體等消耗比較大。下面開始講解百雞百錢。
譯文:公雞乙隻5元,母雞乙隻3元,小雞3只1元。如何用100元買100隻雞。其中公雞,母雞,小雞的數量各是多少?
根據題意,可以得出,兩個100,公雞數目加母雞數目加小雞數目等於100,總的價錢等於100.也就是說,假設公雞數目等於x,
母雞數目等於y,小雞數目等於z,那麼,
5x+3y+z/3=100
x+y+z=100
現在x,y,z的值分別是多少?
使用python解答如下:
count=0
#迴圈次數的計數,從零開始
for x in range(1000):
#range(?)這個數值為任意都可以,後面講解這個數值,也就是for迴圈範圍的作用
for y in range(1000):
#同上。
count+=1
#每一次迴圈後加1,以記錄迴圈次數
z=100-x-y
if 5*x+3*y+z/3==100 and z%3==0:
#如果每個種類**相加等於100為真
print('公雞:%d,,母雞%d,小雞:%d'%(x,y,z))
#列印結果,結果為字串
print(count)
#列印迴圈總次數
#程式執行結果為:
公雞:0,,母雞25,小雞:75
26公雞:4,,母雞18,小雞:78
4019
公雞:8,,母雞11,小雞:81
8012
公雞:12,,母雞4,小雞:84
12005
也就是說總共迴圈了12005次。有四個符合條件的選項
修改迴圈的次數,看看會發生什麼?
count=0
for x in range(100):
for y in range(100):
count+=1
z=100-x-y
if 5*x+3*y+z/3==100 and z%3==0:
print('公雞:%d,,母雞%d,小雞:%d'%(x,y,z))
print(count)
#執行結果:
公雞:0,,母雞25,小雞:75
26公雞:4,,母雞18,小雞:78
419公雞:8,,母雞11,小雞:81
812公雞:12,,母雞4,小雞:84
1205
可以發現迴圈次數減少了,也就是說,效率提高了,迴圈次數減少意味著記憶體的消耗以及執行時間的減少
再次修改迴圈次數,答案徹底揭曉:
count=0
for x in range(20):
for y in range(33):
count+=1
z=100-x-y
if 5*x+3*y+z/3==100 and z%3==0:
print('公雞:%d,,母雞%d,小雞:%d'%(x,y,z))
print(count)
#執行結果:
公雞:0,,母雞25,小雞:75
26公雞:4,,母雞18,小雞:78
155公雞:8,,母雞11,小雞:81
284公雞:12,,母雞4,小雞:84
401#為什麼迴圈次數是20和33呢?因為,假設全部買公雞,公雞單價是5,100元只能最多買20只公雞,也就是假設#5x=100,那麼x=20
#同理,母雞最多是33,因為3y=100,那麼y=33.3333....
#那麼,z%3,也就是小雞的數目必定除以3等於0,這個條件其實可以不需要,因為總共是三個數字,
#x和y的值已經確定了,那麼z的值必定可以確定。因為只有三類,所以for迴圈只需要二層迴圈,
#z由 z=100-x-y來確定。最後說一句,z%3==0這個條件不需要,這個條件無關迴圈次數。
Algorithm 暴力破解法 百錢買百雞
暴力破解法一般指窮舉法。窮舉法的基本思想是根據題目的部分條件確定答案的大致範圍,並在此範圍內對所有可能的情況逐一驗證,直到全部情況驗證完畢。若某個情況驗證符合題目的全部條件,則為本問題的乙個解 若全部情況驗證後都不符合題目的全部條件,則本題無解。窮舉法也稱為列舉法。用窮舉法解題時,就是按照某種方式列...
Python 百錢買百雞
某人有100元錢,買100隻雞。公雞5元乙隻,母雞3元乙隻,小雞1元三隻。問 可以買公雞 母雞 小雞各多少只。使用窮舉法,把每一種可能都試一遍,得到最後正確的結果。若公雞為x只,母雞為y只,小雞為z只 我們將得到公式 5x 3y z 3 100 並且 x y z 100 小雞數除以3的餘數必須是0 ...
Python 百錢百雞問題
百錢百雞問題 模組 numex,所在檔名 num hw.py,level 雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾 何?函式原型 def buy chicken 返回值 返回乙個 list,數列的元素為三元組,代表 雞翁 雞母 雞雛 的數量,如 0,25,75 4...