窮舉演算法
字母代表0-9十個數字中的乙個,且不重複。
wwwdot - google = dotcom
公式中首位不能為0。
求出各個字母代表的數字,符合該公式。
w - 1-9
g - 1-9
d - 1-9
o - 0-9
t - 0-9
l - 0-9
e - 0-9
c - 0-9
m - 0-9
窮舉以上。for迴圈。耗時太長,有1小時15分鐘。
源**:
# encoding=utf-8import os
import time
from datetime import datetime
class data_struct():
def
__init__(self, letter, status):
self.letter = letter
self.status = status # true
表示字母在頭部,不能為零
, false
時可以取零
if self.status == false:
self.digit = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 0-9
else:
self.digit = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 0-9
def norepeat(list0):
length = len(list0)
list1 = [0
for
i in
range(0,10,1)] #
取值0-9
for i in
range(0,length,1):
list1[list0[i]] += 1
if int(list1[list0[i]]) > 1:
return
false
return
true
if __name__ == '__main__':
'''wwwdot - google = dotcom'''
letterw = data_struct('w', true)
letterg = data_struct('g', true)
letterd = data_struct('d', true)
lettero = data_struct('o', false)
lettert = data_struct('t', false)
letterl = data_struct('l', false)
lettere = data_struct('e', false)
letterc = data_struct('c', false)
letterm = data_struct('m', false)
# list0 = [1,2,3,4,5,6,0,8,9]
# if true == norepeat(list0):
# print 'hello'
str1 = ''
str2 = ''
str3 = ''
begintime = datetime.now()
for w in letterw.digit:
for g in letterg.digit:
for d in letterd.digit:
for o in lettero.digit:
for t in lettert.digit:
for l in letterl.digit:
for e in lettere.digit:
for c in letterc.digit:
for m in letterm.digit:
list0 = [w, g, d, o, t, l ,e, c, m]
if true == norepeat(list0):
str1 = str(w)*3 + str(d) + str(o) + str(t)
str2 = str(g) + str(o)*2 + str(g) + str(l) + str(e)
str3 = str(d) + str(o) + str(t) + str(c) + str(o) + str(m)
if int(str1) - int(str2) == int(str3): # wwwdot - google = dotcom
print str1, str2, str3
endtime = datetime.now()
deltatime = endtime - begintime
'窮舉搜尋耗時:
' , deltatime
'''wwwdot - google = dotcom
777589 188103 589486
777589 188106 589483
窮舉搜尋耗時:
1:15:39.682000
'''
常見演算法 窮舉
遇到乙個問題,找不到更好的解決辦法 找不到數學公式或者規律 時,使用 最笨 的辦法,利用計算機計算速度塊的特點,將所有的可能性全部列出來,並將我們想要得到的結果記錄下來。例如 百錢買百雞 我國古代數學家張丘建在 算經 一書中提出的數學問題 雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁...
列舉(窮舉)演算法
一 所謂列舉 1 列舉法的本質就是從所有候選答案中去搜尋正確的解。它的核心思想就是列舉所有的可能 2 使用該演算法需要滿足兩個條件 1 可預先確定候選答案的數量 2 候選答案的範圍在求解之前必須有乙個確定的集合 3 基本框架 二 基本思想 1 列舉演算法簡單粗暴,他暴力的列舉所有可能,盡可能地嘗試所...
列舉 窮舉 演算法
列舉法的本質就是從候選答案中去搜尋正確的解,使用該演算法需要滿足兩個條件 例 填數字遊戲 abcde x e eeeeee 問a,b,c,d,e各為多少?如下 例 填運算子5 運算子1 5 運算子2 5 運算子3 5 運算子4 5 5 問運算子各位啥滿足等式,且該等式不能用括號。分析 由於算術表示式...