<返回更多

Python基础算法之快速求解

2020-08-03    
加入收藏

Python这么强,能不能让它解决一下难倒无数人的奇葩数学题呢?今天我们就用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基础算法之(快速求解)

用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:看图回答衣服与篮球价格问题。

Python基础算法之(快速求解)

衣服与篮球价格问题

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

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>