程序设计与算法——【枚举】(python实现)

  • 枚举法,也叫暴力破解法,是一种基于逐个尝试答案的一种问题求解策略。

                1.完美立方

这个没什么好说的,直接枚举就好了,注意枚举的时候没必要a, b, c, d都从1到N,控制b,c,d大小关系一来可以减少程序执行时间,二来,可以避免相同一组数据输出6次(b, c, d的排列)。

'''
Enumeration algorithm(1)
author : lzh
2018.5.9
'''
N = input('请输入一个正整数:')
for a in range(1, eval(N)+1):
    for b in range(1, a-1):
        for c in range(1, b-1):
            for d in range(1, c-1):
                if (a*a*a == b*b*b + c*c*c + d*d*d):
                    print('Cube={}, Triple={}'.format(a,(b,c,d)))


                2.生理周期



  • 暴力破解,从1开始尝试直到满足条件:
'''
Enumeration algorithm(2)
author : lzh
2018.5.9
'''
p = int(input('请输入一个整数p:'))
e = int(input('请输入一个整数e:'))
i = int(input('请输入一个整数i:'))
d = int(input('请输入一个整数d:'))
k = 1
while((k-p)%23 != 0 or (k-e)%28 != 0 or (k-i)%33 != 0):
    k+=1
x = k-d
print('the next triple peak occurs in {} days'.format(x))
  • 上面的方法确实有点笨,我们是否可以找到规律进行优化呢。对问题分析发现,在找到第一次体力高峰的之后就可以+23的倍数进行枚举,在找到体力和情商的同时高峰后我们就可以以+23*28的倍数进行枚举。通过下图结果就可以很直观的看到区别了。所以,枚举并不一定是要一个个傻傻的遍历。
'''
Enumeration algorithm(2)
author : lzh
2018.5.9
'''
p = int(input('请输入一个整数p:'))
e = int(input('请输入一个整数e:'))
i = int(input('请输入一个整数i:'))
d = int(input('请输入一个整数d:'))
k = 1
n=1 #枚举次数
while((k-p)%23 != 0):
    k += 1
    n += 1
while((k-e)%28 != 0):
    k +=23
    n += 1
while((k-i)%33 !=0):
    k += 23*28
    n += 1
x = k-d
print('the next triple peak occurs in {} days'.format(x))
print(n)


                3.熄灯问题












猜你喜欢

转载自blog.csdn.net/A993852/article/details/80258200
今日推荐