• 【python学习】枚举算法案例分析


    《中学生可以这样学Python》P176-180

    输出由1 2 3 4 这4个数字组成的每位上的数字都不同的所有三位数

    #枚举算法案例分析
    ## 输出由1 2 3 4 这4个数字组成的每位上的数字都不同的所有三位数
    from itertools import permutations
    def demo(digits,num):
        for item in permutations(digits,num):
            print(int(''.join(map(str,item))),end=',')
    demo((1,2,3,4),3)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编写函数 接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数,输出所有符合条件的素数

    #编写函数 接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数,输出所有符合条件的素数
    def IsPrime(p):
        if p==2:
            return True
        if p%2==0:
            return False
        for i in range(3,int(p**0.5)+1,2):
            if p%i==0:
                return False
        return True
    def demo(n):
        if isinstance(n,int) and n>0 and n%2==0:
            for i in range(2,n//2+1):
                if IsPrime(i) and IsPrime(n-i):
                    print('{}+{}={}'.format(i,n-i,n))
    demo(30)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    编写程序 输出所有3位水仙花数

    ## 编写程序 输出所有3位水仙花数
    for i in range(100,1000):
        bai,shi,ge=map(int,str(i))
        if ge**3+shi**3+bai**3==i:
            print(i)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    编写程序 寻找指定位数的黑洞数

    ##编写程序 寻找指定位数的黑洞数
    def main(n):
        start=10**(n-1)
        end=10**n
        for i in range(start,end):
            big=''.join(sorted(str(i),reverse=True))
            little=''.join(sorted(str(i),reverse=False))
            big,little=map(int,(big,little))
            #big,little=int(big),int(little)
            if big-little==i:
                print(i)
    main(4)    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    啤酒问题

    ## 啤酒问题 5桶葡萄酒和1桶啤酒 6个桶的容量分别为30 32 36 38 40 62升。并且只卖整桶酒 不零卖。
    #第一位顾客买走2整桶葡萄酒 第二位顾客买走的葡萄酒是第一位顾客的2倍 那么本来有多少啤酒呢
    #分析,顾客1买走2桶,顾客2至少买3桶,共只有5桶葡萄酒,所以顾客2只可能买3桶,所以啤酒就1桶
    #分析,顾客1买L升,顾客2买2L升,一共3L升。
    buckets={30,32,36,38,40,62}
    total=sum(buckets)
    for item in buckets:
        if (total-item)%3==0:
            print('啤酒是',item)
            break
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    结果:

    >>> %Run test8.py
    123,124,132,134,142,143,213,214,231,234,241,243,312,314,321,324,341,342,412,413,421,423,431,432,
    7+23=30
    11+19=30
    13+17=30
    153
    370
    371
    407
    6174
    啤酒是 40
    >>> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    题型分类汇总
    lwIP 细节之四:ARP 相关知识
    算法笔记(一)
    git 修改和补充本地的commit信息的操作
    游戏开发丨基于Tkinter的五子棋小游戏
    生产问题分析:批量执行慢,根据日志进行分析。
    音视频基础知识
    多数之和问题
    qemu中中断model虚拟化是如何实现的?
    Dynamic CRM开发 - 实体窗体(二)主窗体
  • 原文地址:https://blog.csdn.net/qq_31949641/article/details/128185507