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暴力求解的基本算法,是不是非常简单又方便?写代码是不是比解数学题容易多了?毕竟代码我们只要把算法过程写完丢给电脑去执行就可以了,而数学题是需要自己一步一步去算的。其实还有更多更复杂的问题都可以用暴力求解来快速解决,还可以结合多种算法解决问题,需要结合实践多练习。