1樓:
用c寫120ms左右
@1.6GHz
inti,j
,k;charn[
10]=,
m[11]
=;chars[
10];j=
0;while(!
n[9])
s[9]
=0;printf_s
("%s",s
);}m[
n[0]]
=-1;
dowhile(m
[n[0
]]>0);
m[n[
0]]=0
;while(n
[j]>9)
while(m
[n[j
]]>j);
}m[n
[j]]=
j;while(j
>0)m[k]
=j;n
[j]=
k;}}
2樓:
人家是10!(全排列),你是10億。
10!是多少?3628800,362萬。
你說這相差有多少嘛~
哥們,論學好高中數學的重要性。
3樓:
"""HAWAII + IDAHO + IOWA + OHIO == STATES
510199 + 98153 + 9301 + 3593 == 621246
"""import itertools
def solve():
num_iter = itertools.permutations(range(10), 9)
for nums in num_iterH, A, W, I, D, O, S, T, E = numsif H == 0 or I == 0 or O == 0 or S == 0continue
if H * 100110 + A * 9201 + W * 1010 + I * 11021D * 1000 + O * 1102 == S * 100001 + T * 10100 + E * 10print(nums)
print(" H, A, W, I, D, O, S, T, E")
solve()
1s左右可以得出結果。
單純只是解決這乙個特例的話,要不了多長時間的。
4樓:juu wiio
自己寫了個python版本
和原書的版本相比,使用regex進行了puzzle的嚴格檢驗,沒有使用eval而是自己構造正確性檢查,考慮那些第一位的字母不可能代表0(計算時間減到了大約1/3)
from itertools import permutations
import regex
puzzle = "HAWAII + IDAHO + IOWA + OHIO == STATES"
word_pattern = "[A-Z]+"
match = regex.fullmatch(r"(?:(?)".format(word_pattern), puzzle)
assert match, "Invalid puzzle"
adder_word_list = match.captures('adder')
sum_word = match['sum']
letters_set = set(''.join(adder_word_list + [sum_word]))
assert len(letters_set) <= 10, 'Too many letters'
nonzero_letters = set(word[0] for word in (adder_word_list + [sum_word]))
nonzero_count = len(nonzero_letters)
letters = list(nonzero_letters) + list(letters_set - nonzero_letters)
adder_dict = {}
for adder in adder_word_list:
for i, c in zip(reversed(range(len(adder))), adder):
adder_dict[c] = adder_dict.get(c, 0) + 10 ** i
sum_dict = {}
for i, c in zip(reversed(range(len(sum_word))), sum_word):
sum_dict[c] = sum_dict.get(c, 0) + 10 ** i
for c, v in sum_dict.items():
adder_dict[c] = adder_dict.get(c, 0) - v
for nonzero_permutation in permutations(range(1, 10), len(letters) - 1):
for i in range(nonzero_count, len(letters)):
all_permutation = nonzero_permutation[: i] + (0, ) + nonzero_permutation[i: ]
if sum(adder_dict[c] * v for (c, v) in zip(letters, all_permutation)) == 0:
print('\n'.join(sorted(൪.format(c, v) for (c, v) in zip(letters, all_permutation))))
print('-' * 30)
5樓:
function
*permutation
(chars
,len
)for
(leti=
0,l=
chars
.length;i
}const isOK=( H,A, W,I, D,O, S,T, E)=>H* 100110+A *9201+W *1010+I *11021+D *1000+O *1102 ===S *100001+T *10100+E *10;for (letsof permutation ('1234567890' .split('' ),9))} 隨手一寫,跑了6s,python版跑了13s。 @賀師俊 賀老誠不我欺! update: 更新in-place版本 function *permutation(a ,size )for (leti= 0;i< size;i ++)else}} const isOK=( H,A, W,I, D,O, S,T, E)=>H* 100110+A *9201+W *1010+I *11021+D *1000+O *1102 ===S *100001+T *10100+E *10;for (letsof permutation ('1234567890' .split('' ).map(i =>+i ),10))} 6樓: /*HAWAII + IDAHO + IOWA + OHIO == STATES 510199 + 98153 + 9301 + 3593 == 621246 */console .time ('test' )const LETTERS=[ 'A', 'D', 'E', 'H', 'I', 'O', 'S', 'T', 'W'] const DIGITAL=[ 0,1, 2,3, 4,5, 6,7, 8,9] const swap=( arr,i, j)=> const generate=( arr, index )=>LETTERS .forEach ((letter ,index )=>)const =result const HAWAII=H *1e5+ A*1e4 +W*1 e3+A* 1e2+I *11const IDAHO=I *1e4+ D*1e3 +A*1 e2+H* 10+Oconst IOWA=I *1e3+ O*1e2 +W*10 +Aconst OHIO=O *1e3+ H*1e2 +I*10 +Oconst STATES=S *1e5+ T*1e4 +A*1 e3+T* 1e2+E *10+S if(HAWAII +IDAHO +IOWA +OHIO ===STATES )return }for (leti= index ,len =arr .length;i )swap (arr,i ,index)} }const res= DIGITAL .forEach ((digital ,index )=>)console .log (res )console .timeEnd ('test' )試了下 900 多毫秒,有兩個結果,其中乙個有個數字首位為0,如果排除就是題主的結果。 7樓:安而遇 仿造python幫你改造了一下,在我的電腦上大概要十幾秒const 滿足等式 = (H, A, W, I, D, O, S, T, E) => function range(start, stop, step) ; function* permutations(iterable = '0123456789', r = 9)} 雨落驚風 你想想,遞迴演算法,本質就是數學歸納法 或者,強歸納法 而數學歸納法的遞迴步驟說,我們可以從較小的值通過某個規則 rule 構造出較大的值。所以,就寫個迭代,一步一步的,把f k k n算出來. Python與演算法社群 def fib i,current 0,next 1 if i 0 ... catseye 乙個提示解決你所有的疑問 Contents Frameworks libtk8.6.dylib NSDrawerWindow 也就是說你用TK的話,macOS就整體放棄了 至少無法上官方商店,只能自己發布玩兒 全無商業價值 啊啊啊 我習慣先看看官方手冊。上次去看官方推薦的手冊 htt... 因為某些編譯型語言 如C 的編譯器有尾遞迴優化,所以遞迴演算法效率並不低。但是python並沒有尾遞迴優化。關於尾遞迴可以參考這個 什麼是尾遞迴?程式設計 至於Python如何引入尾遞迴,有乙個增強函式式程式設計特性的模組可以引用,可以參考丁來強之前在Pyconn china 2015上的講義內容 ...Python 哪些可以代替遞迴的演算法?
為什麼很多Python開發者寫GUI不用Tkinter,而要選擇PyQt和wxPython或其他?
用Python寫的方法,為什麼執行時間這麼長?