python算法一:枚举法

这篇具有很好参考价值的文章主要介绍了python算法一:枚举法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.定义:枚举法也称为穷举法,是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。因此,使用枚举法解决问题时,需要考虑优化算法,选择恰当的枚举对象,尽量分析出问题中的隐含条件,缩小枚举范围,以提高解决问题的效率。
2.一般结构:循环(穷举范围)+判断(检验条件)。
 

例题1:请输出所有的两位偶数。

分析:

穷举范围:两位数范围是10-99。利用range(10,100)可生成10-99的列表

判断条件:偶数满足除以二的余数为0。i%2==0  此条件满足则i为偶数

代码如下:

for i in range(10,100):
    if i%2==0:
        print(i)

例题2:输入一个数,判断该数是否为质数

分析:

穷举范围:n为素数,需要满足n%2!=0,n%3!=0 ... n%n-1!=0,n的除数范围应该为2-n-1。

判断条件:n%i==0 则代表i是n的因数,n不是素数,当穷尽所有的i,该条件都不满足,则n为素数

代码如下:

n=int(input())
for i in range(2,n-1):
    if n%i==0:
        break
else:
    print(n,是素数)

例题3:请输出所有的两位质数

分析:

穷举范围:两位数范围是10-99。利用range(10,100)可生成10-99的列表

判断条件:判断每一个n是否为素数,利用例题2中相关代码

代码如下:

for n in range(10,100):
    for i in range(2,n-1):
        if n%i==0:
            break
    else:
        print(n,"是素数")

另一种做法:

t=0
for n in range(10,100):
    for i in range(2,int(2,int(n**0.5)+1)):
        if n%i==0:
            t=1
            break
if t==1:
    print(n."不是素数")
else:
    print(n,“是素数”)

例题4:这个问题,是我国古代著名趣题之一。 大约在1500年前,《孙子算经》中就记载了这个有趣的问题。 书中是这样叙述的:“今有雉兔同笼,上有三十五头,下有九十四足, 问雉兔各几何?这四句话的意思是: 有若干只鸡兔同在一个笼子里,从上面数,有35个头  ;从下面数,有94只脚。求笼中各有几只鸡和兔?

分析:

穷举范围:兔的只数范围为1~34,对应的鸡的只数为35-tu

判断条件:根据每组可能解判断兔的只数*4+鸡的只数*2==94是否成立,如果成立,则代表这组可能解成立

代码如下:

for tu in range(1,35):
    ji=35-tu
    if tu*4+ji*2==94:
        print(“兔的只数为”,tu,“鸡的只数为”,ji)

例题5:一个三位数如果满足该数本身=百位上的数字**3+十位数字**3+个位上的数字**3,则该数被称为三位自幂数,也叫作水仙花数。请输出所有的水仙花数。

穷举范围:三位数的范围是100-999。利用range(100,1000)可以生成该列表。

判断条件:该数本身=百位上的数字**3+十位数字**3+个位上的数字**3

代码如下:

for i in range(100,1000):
    bai=i//100
    shi=i//10%10
    ge=i%10
    if bai**3+shi**3+ge**3==i:
        print(i,“是水仙花数”)

例题6:公鸡5元一只,母鸡3元一只,小鸡3只一元, 用100元买一百只鸡。其中公鸡,母鸡,小鸡都必须要有。问公鸡,母鸡,小鸡要买多少只刚好凑足100元

穷举范围:公鸡只数范围是1~20,母鸡只数1~33,小鸡只数1~100

判断条件:公鸡只数+母鸡只数+小鸡只数==100  且  公鸡的钱数+母鸡的钱数+小鸡的钱数==100

代码如下:

for cock_num in range(1,21):          #公鸡只数可能为1-20
    for hen_num in range(1,34):       #母鸡只数可能为1-33
        for chick_num in range(1,101): #(3小鸡)只数可能为1-100
            money1=cock_num*cock_price+hen_num*hen_price+chick_num*threechick_price
            num1=cock_num+hen_num+chick_num*3
            if money1==100 and num1==100:
                print (cock_num,hen_num,chick_num*3) #(③小鸡数)

例题7:输入两个数,求出这两个数的最大公约数

穷举范围:最大公约数可能是1-两个数中较小的那个

判断条件:这两个数除以最大公约数的余数都为0

代码如下:

m=int(input())
n=int(input())
for i in range(min(m,n),0,-1):
    if m%i==0 and n%i==0:
        print(m,"和",n,"的最大公约数是",i)

例题8:孪生素数(质数对)

所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离已经近得不能再近了,如同孪生兄弟一样,故将这一对素数称为孪生素数。显然,最小的一对孪生素数是(1,3)。我们可以写出3~100以内的孪生素数,一共有8对,分别是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43)(59,61)和(71,73)。随着数字的增大,孪生素数的分布也越来越稀疏,人工寻找孪生素数变得非常困难。关于孪生素数还存在着一个著名的猜想——孪生素数猜想,即孪生素数是否有无穷多对,这是数论中还有待解决的一个重要问题。此处我们只讨论在有限范围内的孪生素数求解问题。
问题:编程求出3~1000以内的所有孪生素数。

分析:

在判断孪生素数之前首先需要判断这个数字是否为素数,如果连素数都不是的话也就没有必要再继续去判断了。函数定义如下:

def isprime(n):

    for i in range(2,n-1):
        if n%i==0:
            return False
    else:
        return True

穷举范围:第一个数的范围是2—998,另一个数的范围则是4—1000

判断条件:第一个数和另一个数调用isprime()函数的返回值均为True

def isprime(n):

    for i in range(2,n-1):
        if n%i==0:
            return False
    else:
        return True
#主程序
for i in range(2,999):
    if isprime(i) and isprime(i+2):
        print(i,"和",i+2,"是孪生素数")

例题9:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的因子之和,则称该数为“完全数”。第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

编程1:输入一个数,判断这个数是否是完数。

分析:

利用for循环找到该数的所有因子,求出因子之和。若因子和与该数相等则该数为完数。

n=int(input())
s=0
for i in range(2,n):
    if n%i==0:
        s=s+i
if s==n:
    print(n,"是完数")

编程2:输出1-1000以内所有的完数

分析:

利用编程1自定义一个可以判断该数是否为完数的函数

穷举范围:1-1000

判断条件:该数为完数,则输出文章来源地址https://www.toymoban.com/news/detail-574307.html

def ws(n):
    s=1
    for i in range(2,n):
        if n%i==0:
            s=s+i
    if s==n:
        return True

#主程序
for i in range(1,1001):
    if ws(i):   
        print(i)

到了这里,关于python算法一:枚举法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 014-信息打点-JS架构&框架识别&泄漏提取&API接口枚举&FUZZ爬虫&插件项目

    1、JS前端架构-识别分析 2、JS前端架构-开发框架分析 3、JS前端架构-打包器分析 4、JS前端架构-提取FUZZ 解决: 1、如何从表现中的JS提取价值信息 2、如何从地址中FUZZ提取未知的JS文件 3、如何从JS开放框架WebPack进行测试 CMS(意思为“网站内容管理系统”, 用来管理网站后台,

    2024年01月21日
    浏览(39)
  • 【图解DSA数字签名算法】DSA签名算法的Python实现 | 物联网安全 | 信息安全

    系列索引:【图解安全加密算法】加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 DSA数字签名算法基于SHA1哈希算法,关于SHA1的实现看另一篇文章。 数字签名标准(DSS)由NIST公布,该标准能够使接收者能够验证数据的完整性和数据发送者的身份而制定,所采用

    2024年02月06日
    浏览(51)
  • python机器学习(六)决策树(上) 构造树、信息熵的分类和度量、信息增益、CART算法、剪枝

    模拟相亲的过程,通过相亲决策图,男的去相亲,会先选择性别为女的,然后依次根据年龄、长相、收入、职业等信息对相亲的另一方有所了解。 通过决策图可以发现,生活中面临各种各样的选择,基于我们的经验和自身需求进行一些筛选,把判断背后的逻辑整理成结构图,

    2024年02月14日
    浏览(48)
  • C++二分查找算法:132 模式枚举3

    本篇是视频课程的讲义,可以看直接查看视频。也可以下载源码,包括空源码。 二分查找算法合集 包括题目及代码 C++二分查找算法:132 模式解法一枚举3 C++二分查找算法:132 模式解法二枚举2 代码最简洁 C++二分查找算法:132 模式解法三枚举1 性能最佳 C++单调向量算法:1

    2024年02月04日
    浏览(40)
  • 【夜深人静学数据结构与算法 | 第十一篇】枚举算法

    目录 前言: 枚举算法: 优点: 枚举算法的种类: 枚举算法案例: 343. 整数拆分 - 力扣(LeetCode) 12. 整数转罗马数字 - 力扣(LeetCode) 总结: 本文我们将为大家介绍什么是枚举算法,以及枚举算法的优点,在后面我们也会为大家讲解几道枚举算法的经典例题,各位感兴趣的

    2024年02月13日
    浏览(48)
  • Python必知必会 os 模块详解

    ❤️ 作者简介 :大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者 🐟 个人主页 :https://blog.csdn.net/qq_52007481 ⭐ 个人社区 :【小鱼干爱编程】 🔥 算法专栏 :算法竞赛进阶指南 💯 刷题网站 :市面上的刷题网站有很多如何选择一个适

    2024年02月03日
    浏览(52)
  • C++二分查找算法:132 模式解法二枚举2

    二分查找算法合集 包括题目及代码 C++二分查找算法:132 模式解法一枚举3 C++二分查找算法:132 模式解法二枚举2 代码简洁 C++二分查找算法:132 模式解法三枚举1 性能最佳 C++单调向量算法:132 模式解法三枚举1 代码更简洁 C++二分查找算法:132模式枚举3简洁版 代码简洁,性能

    2024年02月05日
    浏览(44)
  • 洛谷题单【算法1-3】暴力枚举 P1157

            最近有很多自己想做的事情,但猛地发现自己似乎并没有将课内的课程知识学好,个人规划与学习安排之间似乎出现了不可忽视的冲突,于是上一周自己在无所事事中迷茫地摆了一周。打算从这周开始改变,就从每天坚持发帖子记录自己做题经验开始吧。 题目:

    2024年04月17日
    浏览(48)
  • 信息管理毕设分享(含算法) python大数据房价预测与可视化系统

    # 0 简介 今天学长向大家介绍一个适合作为毕设的项目 毕设分享 python大数据房价预测与可视化系统 项目获取: https://gitee.com/sinonfin/algorithm-sharing 1.需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写

    2024年02月03日
    浏览(42)
  • 蓝桥杯双周赛算法心得——三带一(暴力枚举)

    大家好,我是晴天学长,枚举思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .三带一 2) .算法思路 1.通过Scanner读取输入的整数n,表示接下来有n个字符串需要处理。 2.使用循环遍历每个字符串: 3.将字符串转换为字符数组c。 4.对于每个字符c[j],统计在整个

    2024年02月07日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包