zoukankan      html  css  js  c++  java
  • 算法面试题-阿里编程

    题目没截图,口述大概吧。

    给定一个表达式,和一个数组,表达式中有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计算表达式左边的值,和右边进行比较,相等则输出。

    如果表达式中还包含"_"符号,则遍历待选数字,替换掉表达式中的第一个"_"符号,接着去掉待选数字继续递归即可。

  • 相关阅读:
    js实现方块弹珠游戏
    学习servlet时出现的一些问题
    简述JAVA类的生命周期
    JAVA高级之路----JAVA多线程
    小计Tomcat的调优思路
    java生成pdf
    git分支在团队中的使用
    程序员修炼内功心法
    学会学习
    如何快速阅读
  • 原文地址:https://www.cnblogs.com/Fndroid/p/6598940.html
Copyright © 2011-2022 走看看