python枚举算法流程图_程序设计与算法——【枚举】(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.熄灯问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值