題目沒截圖,口述大概吧。
給定一個表達式,和一個數組,表達式中有n個缺失,在數組中選擇n個分別填入缺失中,使得等式成立。
例子:
3_*2=_2
1 3 6 8
輸出:
31*2=62
選出的數不能重復,並且n不確定。
這個題目用Python做是非常簡單的,因為Python有eval方法來計算表達式的值。這個題首先是一個深度優先搜索算法,可以用遞歸或者棧來做,遞歸的話就更簡單了。
直接給代碼:
1 def search(exp, nums): 2 if '_' not in exp or nums is None: 3 exps = exp.split('=') 4 if eval(exps[0]) == float(exps[1]): 5 print exps[0]+'='+exps[1] 6 return 7 else: 8 for num in nums: 9 e = exp.replace('_', num, 1) 10 ns = nums[:] 11 ns.remove(num) 12 search(e, ns) 13 14 15 if __name__ == '__main__': 16 exp = raw_input() 17 nums = raw_input().split(' ') 18 search(exp, nums)
遞歸的終止條件是表達式中不包含"_"符號,如果不包含,使用eval計算表達式左邊的值,和右邊進行比較,相等則輸出。
如果表達式中還包含"_"符號,則遍歷待選數字,替換掉表達式中的第一個"_"符號,接着去掉待選數字繼續遞歸即可。