算法面試題-阿里編程


題目沒截圖,口述大概吧。

給定一個表達式,和一個數組,表達式中有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計算表達式左邊的值,和右邊進行比較,相等則輸出。

如果表達式中還包含"_"符號,則遍歷待選數字,替換掉表達式中的第一個"_"符號,接着去掉待選數字繼續遞歸即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM