zoukankan      html  css  js  c++  java
  • 给一个字符串"123456789", 在任意字符中间插入“+”、“-”、“*”、“/”四种运算符,使最后的计算结果等于50。 例如你可以如此插入:1*2*3*4-56-7+89,使这个式子的最终结果等于50。 输出所有可能的式子结果

    一、今天观麦的一个笔试题,感觉有点意思

    给一个字符串"123456789",
    在任意字符中间插入“+”、“-”、“*”、“/”四种运算符,使最后的计算结果等于50。
    例如你可以如此插入:1*2*3*4-56-7+89,使这个式子的最终结果等于50。
    输出所有可能的式子结果

    我的思路一开始是穷举,然后是想着用动态规划的思想去做了,将问题分而治之,使用50 + - * / “空”去计算处理0到i个因子,然后其结果,同最后length-i 个数组成最大值,也就是后面的所有位数不做任何变化,即使最大的(如:78*9<78*10=780<789)所以做比较如果左乘法<50,那么这条路劲就不行,
    同理除法>50,加法<50,减法>50;都是结束条件。

    以上尝试均失败23333

    最后成功还是用了递归啊!

     1 """
     2 给一个字符串"123456789",
     3 在任意字符中间插入“+”、“-”、“*”、“/”四种运算符,使最后的计算结果等于50。
     4 例如你可以如此插入:1*2*3*4-56-7+89,使这个式子的最终结果等于50。
     5 输出所有可能的式子结果。
     6 """
     7 rvs_op = {
     8     "+":"-",
     9     "-":"+",
    10     "*":"/",
    11     "/":"*",
    12 }
    13 result = []
    14 
    15 def inner_make(operator, pos, lastret, remain_num, acc_ret):
    16     # 如果操作符为空就将原来的remain 原样返回,并且 pos+1
    17     remain_num = remain_num.replace(pos, pos + operator)
    18     if operator == "+" or operator == "-":
    19         temp = remain_num.split(operator)
    20         remain_num = temp[1]
    21         lastret = eval(acc_ret + temp[0])
    22         acc_ret += temp[0]+operator
    23     if pos == "8":
    24         ret = eval(acc_ret+remain_num)
    25         if ret==50:
    26             result.append(acc_ret+remain_num)
    27         return
    28     pos = str(int(pos) + 1)
    29 
    30     for i in ["+", "-", "*", "/", ""]:
    31         inner_make(i, pos, lastret, remain_num, acc_ret)
    32 
    33 def make_50(nums: str) -> list:
    34     inner_make("", "0", 1, nums, "")
    35     return result
    36 
    37 
    38 
    39 
    40 # 不要修改下面的部分
    41 if __name__ == "__main__":
    42     results = make_50("123456789")
    43     for result in results:
    44         assert eval(result) == 50
    45     print("OK")
    D:projectvenvScriptspython.exe E:/chromeDownload/problem1.py
    1+2+3+4+5*6-7+8+9
    1+2+3+4+56*7/8-9
    1+2+3+4-56+7+89
    1+2+3-4+5+6*7-8+9
    1+2+3-4+56-7+8-9
    1+2+3-4-5+6+7*8-9
    1+2+3*4+5+6+7+8+9
    1+2+3*4+5-6*7+8*9
    1+2+3*4-5*6+7*8+9
    1+2+3*4-5*6-7+8*9
    1+2+3*45-6+7-89
    1+2+34-5-6+7+8+9
    1+2+34-56+78-9
    1+2-3+4+5+6*7+8-9
    1+2-3+4+5-6+7*8-9
    1+2-3+4+56+7-8-9
    1+2-3+4*5+6+7+8+9
    1+2-3+4*5-6*7+8*9
    1+2-3+45-67+8*9
    1+2-3-4+5*6+7+8+9
    1+2-3-4-5+6*7+8+9
    1+2-3-4-5-6+7*8+9
    1+2-3-4-5-6-7+8*9
    1+2-34+5-6-7+89
    1+2-34-56/7+89
    1+2*3+4-5*6+78-9
    1+2*3+45+6-7+8-9
    1+2*3-4-5+6*78/9
    1+2*3-4*5-6+78-9
    1+2*3-45+6-7+89
    1+2*3*4+56/7+8+9
    1+2*3*4-5+6+7+8+9
    1+2*3*4-5-6*7+8*9
    1+2*3*4*5-6+7-8*9
    1+2*3*4*5-6-7*8-9
    1+2*34-5-6-7+8-9
    1+23+4+5*6-7+8-9
    1+23-4+5+6*7-8-9
    1+23-45+6+7*8+9
    1+23-45+6-7+8*9
    1-2+3-4+5-6*7+89
    1-2+3-4-5*6-7+89
    1-2+3-4*5+67-8+9
    1-2+3-45+6+78+9
    1-2+3-456+7*8*9
    1-2+3*4-5*6+78-9
    1-2+3*45-67-8-9
    1-2+3/4*5+6*7/8*9
    1-2+34+5+6+7+8-9
    1-2+34-5-67+89
    1-2+34-5*6+7*8-9
    1-2-3+4+56-7-8+9
    1-2-3-4+5+6+7*8-9
    1-2-3-4+56*7/8+9
    1-2-3-4-5-6+78-9
    1-2-3*4-5+67-8+9
    1-2-34-5-6+7+89
    1-2*3+4*5*6+7-8*9
    1-2*3+4*5*6-7*8-9
    1-2*3-4*5+6+78-9
    1-2*3*4+5+67-8+9
    1-2*3*4+56/7*8+9
    1-2*3*4*5/6+78-9
    1-2*34+5*6+78+9
    1-23+4+5-6+78-9
    1-23+4-5-6+7+8*9
    1-23+4*5+6*78/9
    1-23-4+5+6+7*8+9
    1-23-4+5+6-7+8*9
    1-23-4-5-6+78+9
    1*2+3+4*5+6*7-8-9
    1*2+3+45+6-7-8+9
    1*2+3+45-6+7+8-9
    1*2+3-4-5*6+7+8*9
    1*2+3-45-6+7+89
    1*2+3*4+5*6+7+8-9
    1*2+3*4-5+6*7+8-9
    1*2+3*4-5-6+7*8-9
    1*2+3*4*5-6-7-8+9
    1*2+3/4*56+7+8-9
    1*2-3+4-5+6*78/9
    1*2-3+4*5*6-78+9
    1*2-3-4+5+67-8-9
    1*2-3-4+56/7*8-9
    1*2-3-4*5+6+7*8+9
    1*2-3-4*5+6-7+8*9
    1*2*3+4+5*6-7+8+9
    1*2*3+4+56*7/8-9
    1*2*3+4-56+7+89
    1*2*3-4+5+6*7-8+9
    1*2*3-4+56-7+8-9
    1*2*3-4-5+6+7*8-9
    1*2*3*4-56-7+89
    1*2*345/6+7-8*9
    1*2*345/6-7*8-9
    1*2/3*4+56-78/9
    1*23+4+5-6+7+8+9
    1*23+4-56+7+8*9
    1*23+45+6-7-8-9
    1*23-4-56+78+9
    1*23-4*5-6*7+89
    1*23*4+5+6*7-89
    1/2+345/6-7+8-9
    12+3+4-56+78+9
    12+3-4-5*6+78-9
    12+3*4-56-7+89
    12+3*4*5+67-89
    12-3+4*5*6-7-8*9
    12-3+45+6+7-8-9
    12-3-4-5+67-8-9
    12-3*4+56-7-8+9
    12*3+4+5-67+8*9
    12*3+4+56/7/8+9
    12*3-45+6*7+8+9
    12*3-45-6+7*8+9
    12*3-45-6-7+8*9
    12*3/4*5-67+8*9
    12*34/56*7+8-9
    12/3+4-5-6*7+89
    12/3-4+56-7-8+9
    12/3-4*5+67+8-9
    12/3*4*5+6*7-8*9
    12/3*4*5-6-7-8-9
    12/3/4-5*6+7+8*9
    12/3/4*56-7-8+9
    123+4-5*6-7*8+9
    123+4*5-6-78-9
    123-4*5-6-7*8+9
    123-4*5*6+7*8-9
    123/4+5+6*7/8+9
    OK
    
    Process finished with exit code 0
  • 相关阅读:
    Pycharm的快捷键
    【Python】笔记1:Spyder常用快捷键
    npm常用命令整理
    MVC4 IIS7.5 403.14错误的解决办法
    AO 获取系统自带的工具条
    CentOS 7.3下安装Redis
    CentOS 7.3下安装MySql
    安装sql server 2005时出现“安装汇编”错误的解决办法
    解决IIS下localhost访问需要输入用户名和密码的问题
    不断沟通,反复确认
  • 原文地址:https://www.cnblogs.com/shiqi17/p/12694930.html
Copyright © 2011-2022 走看看