1枚举算法

'''
枚举算法的概念
    枚举,就是将问题的可能解一个个地列举,逐一判断,即使中途找到符合的解也要继续找下去,将所有可能都找完才结束。
    枚举算法又叫穷举算法,其基本思想是把问题所有的解一一地罗列出来,并对每一个可能解进行判断,以确定这个可能解
    是否是问题的真正解。若是,就采纳这个解,否则就抛弃它。

枚举算法的程序实现
    1列举与检验过程既不重复也不遗漏;
    2尽可能地使可能解的罗列范围最小,以提高解决问题的效率;
    3用循环语句(for)在一定范围内列举所有可能的解;
    4用选择语句(if)判断和选择真正的解。

枚举算法的一般格式
循环结构:
    循环结构:
例1:用50元钱兑换为1,2,5元共25张,每种不少于1张,有多少种方案
for i in range(1,26):
    for j in range(1,26):
        for k in range(1,10):
            if i+2*j+5*k == 50 and i + j + k == 25:
                print('一元%s张,二元%s张,五元%s张'%(i,j,k))

例2:如果一个自然数恰好等于它的因子之和,这个数就是“完全数”。如6=1+2+3。设计一个算法求1000以内的完全数。
for i in range(1000):
    a = set()
    for j in range(1,i):
        if i%j == 0:
            a.add(j)
    a = list(a)
    a.sort(reverse=False)
    if i == sum(a):
        print('%s是全完数'%i,a)

例3:查找100以内能被2和3整除的数
for i in range(100):
    if i%2 == 0 and i%3 == 0:
        print('%s能被2和3同时整除'%i)

例4:用枚举算法找出所有满足各位数字之和等于7的三位数
for i in range(106,701):
    a = i//100
    b = (i - a*100)//10
    c = i%10
    if a + b + c == 7:
        print('%s这个三位数各位数字之和为7'%i)

例5:
    找回密码:1密码是6位数字,前面两位是85;
            2最后两位数字相同;
            3能被13和33整除
for i in range(850000,860000):
    b = i%100
    b1 = b//10
    b2 = b%10
    if b1 == b2 and i%13 == 0 and i%33 == 0:
        print('密码是%s'%i)

例6:
有一盒乒乓球,9个9个的数最后余下7个,5个5个的数最后余下2个,4个4个的数最后余下1个。问这盒乒乓球到少有多少个?
方法1:
for i in range(1,10000):
    a_9 = i%9
    a_5 = i%5
    a_4 = i%4
    if a_9 == 7 and a_5 == 2 and a_4 == 1:
        print('这盒乒乓球最少有%s个'%i)
        break

方法2:
n = 1
while True:
    if n%9==7 and n%5==2 and n%4==1:
        print('这盒乒乓球最少有%s个'%n)
        break
    n += 4

方法3:
n = 16
while True:
    if n%5==2:
        break
    n += 9
while True:
    if n%4==1:
        break
    n += 45
print('这盒乒乓球最少有%s个'%n)
'''
s1 = []
for i in range(1,10000):
    a = 0
    for j in range(1,i+1):
        a += j
    if a >= 1000000:
        break
    s1.append(a)

s2 = []
for i in range(1,10000):
    a = i ** 2
    if a >= 1000000:
        break
    s2.append(a)

for i in s1:
    if i in s2:
        print('A和B相同的数有%s'%i)

a = 8
n = 1
while n <= a:
    for x in range(1,1000000000):
        for y in range(1,1000000000):
            if x*(x+1)/2 == y**2:
                print('第%s数是%s'%(n,y**2))
                n += 1
            if y**2 > x*(x+1)/2:
                break
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值