Python 穷举算法(Exhaustive Attack method)
Python 穷举算法(Exhaustive Attack method)
2016年11月 CCUT北湖校区
- 穷举算法又称列举法,其基本思想是逐一列举问题所涉及的所有情况。
- 穷举法常用于解决“是否存在”和“有多少种可能”的问题。
- 应用穷举法时应注意对问题所涉及的有限种情形须—列举,既不能重复,又不能遗漏。
- 穷举法常应用循环结构体来实现。
- 理论上,穷举法可以解决可计算领域中的各种问题。尤其是在计算机速度非常高的今天,穷举的应用领域非常广阔。
- 在实际应用中,通常要解决的问题规模不大,用穷举设计的算法其运算速度是可以接受的。此时,设计一个更高效的算法代价不值得。
百鸡百钱问题
已知:公鸡5元一只,母鸡3元一只,小鸡一元3只。现用100元钱买了100只鸡。
问:公鸡母鸡小鸡各几只?
# -*- coding: utf-8 -*-
'''
Title: The question of 'Hundreds of chickens'
'''
for i in range(100):
for j in range(100):
for k in range(100):
number = i + j +k
price = i*5 + j*3 + k*(1/3)
if (number <= 100) & (price <= 100) & (k % 3 == 0):
print("There are %dck, %d hen,and %d chick" % (i,j,k))
数学问题
有i,j,k,m,n五个字母分别代表0~9的数字,满足下面条件:
i j k m n
* i
--------------------
n n n n n n
求i,j,k,m,n的实际值
# -*- coding: utf-8 -*-
'''
Title: The question of math
'''
for i in range(1,10):
for j in range(10):
for k in range(10):
for m in range(10):
for n in range(10):
num = 10000*i + 1000*j + 100*k +10*m + n
c = n*111111
if num*i == c:
print(i,j,k,m,n)
鸡兔同笼问题
鸡兔同笼问题最早记载于1500年前的《孙子兵法》,这是一个非常有名的问题。鸡兔同笼的原文如下:
今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?
这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头,从下面数共有94只脚。问笼中鸡和兔的数量各是多少?
# -*- coding: utf-8 -*-
'''
Title: The question of Chicken and rabbit cage
'''
for i in range(1,35):
for j in range(1,35):
if (i*2 + j*4) == 94 and (i + j == 35):
print("There are %d chickens,and %d rabbits" % (i,j))
# achieve by list comprehension
list = [(i,j) for i in range(1,35) for j in range(1,35) if (i*2 + j*4) == 94 and i + j ==35]