Python這么強,能不能讓它解決一下難倒無數人的奇葩數學題呢?今天我們就用Python求解幾個實際的數學題來了解一下Python的一些基本的算法。如果你剛好入門Python,懂一些Python的基本語法,那么剛好可以了解一下,對你的算法提升可能有一定幫助。本文難度為:入門。所以高手請忽略。
暴力求解
暴力求解是已知最古老的算法之一,在科學應用中有其特殊的優勢,尤其是計算機技術的出現,使其解題優勢變得更加明顯,暴力求解或許是解決問題的算法中最“簡單粗暴”的方式了,它是計算機解邏輯類題的基礎方法,由于其實現較為簡單,效率高,所以算法使用已經非常普遍。
問題1:雞兔同籠,雞兔共78只,腳200只,問:雞和兔各多少只?
典型的雞兔同籠問題,曾幾何時,那是我們小學數學時代的噩夢!而今天,用Python暴力求解完全可以不費吹灰之力計算結果。
for ji in range(1,79):
tu=78-ji
if ji*2+tu*4==200:
print('雞有{}只,兔有{}只'.format(ji,tu))
break
運行結果:
雞有56只,兔有22只
注:在計算出結果后使用break打斷循環,實現短路求值,避免多余的無效計算,可以有效的提升計算效率。
用Python快速求解雞兔同籠問題
問題2:雞兔同籠,兔比雞少15只,共有腳282只,問:雞和兔各多少只?
雞兔同籠問題的第二類。
for ji in range(15,100):
tu=ji-15
if ji*2+tu*4==282:
print('雞有{}只,兔有{}只'.format(ji,tu))
break
運行結果:
雞有57只,兔有42只
問題3:小明用10元錢正好買了20分和50分的郵票共35張,求這兩種郵票名買了多少張?
雞兔同籠問題的類似問題。
for a in range(35):
b=35-a
if a*2+b*5==100:
print('20分郵票{}張,50分郵票{}張'.format(a,b))
break
運行結果:
20分郵票25張,50分郵票10張
問題4:儲蓄罐里共2分和5分硬幣70枚,小剛數了一下,一共有194分,求兩種硬幣各有多少枚?
for a in range(70):
b=70-a
if a*2+b*5==194:
print('2分硬幣{}枚,5分硬幣{}枚'.format(a,b))
break
運行結果:
2分硬幣52枚,5分硬幣18枚
問題5:一個運輸隊包運10000只瓶子,每100只可得運費1元5角,如損壞一只不但不給運費,還要賠償2角。這個隊共得運費146元5角6分,損壞了幾只瓶子?
最煩這種難以理解,邏輯燒腦的題了,想當年學生時代做這種題的時候可沒少挨打。
for a in range(10000):
b=10000-a
if b*0.015-a*0.2==146.56:
print('共壞了%d個瓶子'%a)
break
運行結果:
共壞了16個瓶子
問題6:物流公司里有A、B兩種車,有一批大小一樣的箱子。假如A車運來4車貨物,用B車裝走,B車裝滿了6車后還剩下2件;假如A和B兩種車一起裝貨,A裝滿6車,B裝滿7車,一共能裝83件。請問:A車和B車每車各能裝幾件貨物?
要是當年上學,看到兩個未知數,我基本就放棄抵抗了。現在,利用and條件暴力求解兩個未知數輕而易舉。
for a in range(100):
for b in range(100):
if a*4-b*6==2 and a*6+b*7==83:
print('A車每車能裝{}件,B車每車能裝{}件'.format(a,b))
break
運行結果:
A車每車能裝8件,B車每車能裝5件
問題7:一批鋼材,用小卡車裝載要45輛,用大卡車裝載只要36輛。已知每輛大卡車比每輛小卡車多裝4噸,那么這批鋼材有多少噸?
分析:我們只要計算出小卡車能裝多少噸就可以算出總數。
for x in range(50):
if 45*x==36*(x+4):
print('一共有{}噸'.format(45*x))
break
運行結果:
一共有720噸
問題8:已知某座橋長800米,一列火車從橋上通過,測得火車從剛上橋到完全通過耗時45秒,整列火車都在橋上的時長是35秒,求火車的速度和長度。
換個思路變成二元一次方程組 ,設火車速度為x,長度為y。
for x in range(100):
for y in range(200):
if 45*x==800+y and 35*x==800-y:
print('火車速度是{}米每秒,火車長度{}米'.format(x,y))
break
運行結果:
火車速度是20米每秒,火車長度100米
問題9:看圖回答衣服與籃球價格問題。
衣服與籃球價格問題
還是按照以上的方法,將其寫成代碼即可,假設衣服價格x,籃球價格y。
for x in range(100):
for y in range(100):
if 3*x+2*y==295 and 5*x+4*y==515:
print('衣服單價是{}元,籃球單價是{}元'.format(x,y))
print('2件衣服加3個籃球一共{}元'.format(2*x+3*y))
break
運行結果:
衣服單價是75元,籃球單價是35元
2件衣服加3個籃球一共255元
通過以上題解你應該明白了Python暴力求解的基本算法,是不是非常簡單又方便?寫代碼是不是比解數學題容易多了?畢竟代碼我們只要把算法過程寫完丟給電腦去執行就可以了,而數學題是需要自己一步一步去算的。其實還有更多更復雜的問題都可以用暴力求解來快速解決,還可以結合多種算法解決問題,需要結合實踐多練習。