Python 百雞百錢(暴力破解的一些想法)

2021-10-23 03:18:38 字數 2212 閱讀 9138

演算法內有很多套路,比如,二分法,二叉樹法,迴圈迭代法,氣泡排序法,暴力破解法等等各種各樣的演算法,這些演算法針對不同的模型,模型就先不解釋了,我們今天主要討論的是暴力破解法也稱作窮舉法,這種演算法相當對得起它的名字,因為暴力所以相對簡單,適用人群是喜歡暴力的,簡單的人群,但可能不是最高效的。簡單來說,優點:此演算法簡單,暴力,效果直觀,缺點:執行效率較低,對記憶體等消耗比較大。下面開始講解百雞百錢。

譯文:公雞乙隻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...