【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)

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

#编写函数 接收一个正偶数为参数,输出两个素数,并且这两个素数之和等于原来的正偶数,输出所有符合条件的素数
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)

编写程序 输出所有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)

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

##编写程序 寻找指定位数的黑洞数
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)    

啤酒问题

## 啤酒问题 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

结果:

>>> %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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值