编程学习网 > 编程语言 > Python > python算法教程(python算法枚举)
2023
06-02

python算法教程(python算法枚举)

· 什么是枚举算法?


枚举法又称穷举法,即将问题的所有可能情况一一列出来,然后根据要求逐一判断,最后得出问题的解

· 枚举算法优缺点?

优点:得到的结果一定正确

缺点:效率低,可能会做无用功

· 枚举算法举例

【百钱买百鸡】

>>>问题描述

我国古代数学家张丘建在《算经》一书中提出了一个数学问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?

翻译过来,意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?

>>>算法分析

按数学的方法,可设公鸡买x只,母鸡买y只,小鸡买z只,列方程组为:

x + y + z = 100

5x + 3y + 1/3 z = 100

0 ≤ x ≤ 100

0 ≤ y ≤ 100

0 ≤ z ≤ 100

求解得:

x = 0 , y = 25 , z = 75或

x = 4 , y = 18 , z = 78或

x = 8 , y = 11 , z = 81或

x = 12 , y = 4 , z = 84

>>>编程算法

###百钱买百鸡
num = 0
for cock in range(0,101):
    for hen in range(0,101):
        for chick in range(0,101):
            if cock + hen + chick == 100 and cock*5 + hen*3 + chick/3 == 100:
                print(f'公鸡{cock},母鸡{hen},小鸡{chick}')
                num += 1
print(f'共有{num}种结果')
运行结果

公鸡0,母鸡25,小鸡75

公鸡4,母鸡18,小鸡78

公鸡8,母鸡11,小鸡81

公鸡12,母鸡4,小鸡84

共有4种结果

【寻找完全数】

>>>问题描述

找出10000以内的所有完全数

>>>问题分析

首先,我们来看看什么是完全数(下面这段话来源于百度百科)

完全数又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

>>>编程算法

###寻找完全数
list = []                                       #初始化空列表,用于存储结果
for num in range(1,10001):                      #对1-1000内自然数num依次判断
    sum_factor = 0                              #初始化因数的和sum_factor为0
    for factor in range(1,num-1):               #对num的因数factor依次判断
        if num % factor == 0:
            sum_factor = sum_factor + factor
    if sum_factor == num:                       #满足条件
        list.append(num)                        #存储在list列表
print(list)                                     #打印结果
运行结果

[6, 28, 496, 8128]

【生日蜡烛】(2016蓝桥杯)

>>>问题描述

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。现在算起来,他一共吹熄了236根蜡烛。请问,他从多少岁开始过生日party的?

要求:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

>>>问题分析

我们不妨设某君的年龄在100岁之内,假设从x岁

开始过生日,现在年龄为y,由于年龄是连续等差数列,则根据等差数列求和,可列方程组:

(x + y) * (y - x + 1) / 2 = 236

0 ≤ x ≤ 100

x ≤ y ≤ 100

解得:

x = 26 , y = 33

>>>编程算法

###生日蜡烛
for x in range(1,100):                          #遍历开始年龄
  for y in range(x,100):                        #遍历现在年龄
    if (x+y)*(y-x+1)/2 == 236:                  #等差数列求和公式
      print(x)
运行结果

26

以上就是python算法教程(python算法枚举)的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取