zoukankan      html  css  js  c++  java
  • 算法--枚举

    枚举思想

    1,枚举算法的定义:

    在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么该结论是可靠 的,这种归纳方法叫做枚举法。

    2,枚举算法的思想是:

    将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,舍弃不合适的。
    3,使用枚举算法解题的基本思路如下:
    (1)确定枚举对象、范围和判定条件。
    (2)逐一枚举可能的解并验证每个解是否是问题的解。
    4,枚举算法步骤:
    (1)选择合适的研究对象的范围。
    (2)找到判断正确解的条件,列举。
    (3)逐一检验范围内的所有研究对象,

    5.优缺点

    • 优点:算法简单,在局部地方使用枚举法,效果十分的好
    • 缺点:运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢

    百钱买百鸡问题

    x=0
    while x<=int(100/5): #确定枚举对象,范围和判定条件
        y=0
        while y<=int(100/3):#确定枚举对象,范围和判定条件
            z=100-x-y       #列举
            if 5*x+3*y+z/3==100:#逐一枚举可能的解,并验证每个解是否是问题的解
                print(x,y,z)
            y=y+1
        x=x+1

    结果:

    x: 0 y: 25 z: 75
    x: 4 y: 18 z: 78
    x: 8 y: 11 z: 81
    x: 12 y: 4 z: 84

    水仙花问题

    python代码

    x=100
    while int(x)<=999:
        a=int(x/100)
        b=int((x-a*100)/10)
        c=x-a*100-b*10
        if a**3+b**3+c**3==x:
            print("a",a,"b",b,"c",c)
        x=x+1

    结果:

    a 1 b 5 c 3
    a 3 b 7 c 0
    a 3 b 7 c 1
    a 4 b 0 c 7

    包装问题

     流程图

    python代码:

    x=1
    while 0<x<=int(600/8):
        y=1
        while 0<y<=int(600/3):
            if 8*x+3*y==600:
                print(x,y)
    
            y=y+1
        x=x+1

    答案:

    3 192
    6 184
    9 176
    12 168
    15 160
    18 152
    21 144
    24 136
    27 128
    30 120
    33 112
    36 104
    39 96
    42 88
    45 80
    48 72
    51 64
    54 56
    57 48
    60 40
    63 32
    66 24
    69 16
    72 8
    View Code
  • 相关阅读:
    点、面状地物对象的时态GIS
    关于dijit.form.ComboBox 赋值,更新值
    远程桌面超出最大连接数时强制登录
    SQL和excel数据互导入
    google map api 二三维联动 参考
    PowerDesign设置列名与表名的大小写规则
    Nunit在VS2010加载不了程序集的解决办法
    缩写
    Python 自用脚本
    UVM项目随笔
  • 原文地址:https://www.cnblogs.com/sticker0726/p/8722279.html
Copyright © 2011-2022 走看看