python 窮舉演算法

2021-08-08 02:48:07 字數 2577 閱讀 6021

窮舉演算法

字母代表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-8

import 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

print

'窮舉搜尋耗時:

' , 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 問運算子各位啥滿足等式,且該等式不能用括號。分析 由於算術表示式...