最近看到這個「算法」題,其實在解題過程當中並無發現過多算法。算法
解題思路: 在1,2...9 插入運算符(+ - 或者沒有),1到9有8個空位,每一個空位有三種可能性,也就是3^8種。數組
運用PHP的弱類型特性,以及強大的數組, 咱們只須要將每一個有運算符的數字放入數組中便可。函數
好比: ["1," "+23", "-45", "678", "-9"], 不一樣的運算符就組合成相似的數組,最後magic函數 array_sum。spa
$a = [[1]]; $l = 1; $t = microtime(true); while($l < 9) { $c = []; foreach($a as $k => $d) { $e = count($d); $f = [$d, $d, $d]; $f[0][$e-1] = $f[0][$e-1] . ($l + 1); $f[1][] = '+'. ($l + 1); $f[2][] = '-' . ($l + 1); $c = array_merge($c, $f); } $a = $c; $l++; } foreach($a as $v) { if (array_sum($v) == 100) { echo implode('', $v) .' = 100' . PHP_EOL; } } $t2 = microtime(true); echo ($t2 - $t) .PHP_EOL;
輸出結果:code
123+45-67+8-9 = 100
123+4-5+67-89 = 100
123-45-67+89 = 100
123-4-5-6-7+8-9 = 100
12+3+4+5-6-7+89 = 100
12+3-4+5+67+8+9 = 100
12-3-4+5-6+7+89 = 100
1+23-4+56+7+8+9 = 100
1+23-4+5+6+78-9 = 100
1+2+34-5+67-8+9 = 100
1+2+3-4+5+6+78+9 = 100
0.22899389267blog