Java 如何找到特定数字的精确运算集?

Java 如何找到特定数字的精确运算集?,java,algorithm,math,puzzle,discrete-mathematics,Java,Algorithm,Math,Puzzle,Discrete Mathematics,我正在尝试实施一个解决此问题的程序: 如果给您一个特定的号码(例如:268) 以及另外6个数字(例如:2,4,5,25,75100) 我如何才能找到给我准确答案或最接近答案的操作 您可以使用以下操作回答上一个示例:75*4-25-5-2=268 规则: 您可以使用以下算术运算:+,-,*,/,() 使用除法时,提醒必须等于0(6/3可以,但 6/4不好!) 同一号码不能多次使用。 此外,您可以避免使用数字(例如,在我们的 上一个示例) 有什么比写下所有的可能性并选择最接近的一个更好的解决方案吗

我正在尝试实施一个解决此问题的程序:

如果给您一个特定的号码(例如:268)
以及另外6个数字(例如:2,4,5,25,75100)

我如何才能找到给我准确答案或最接近答案的操作

您可以使用以下操作回答上一个示例:75*4-25-5-2=268


规则:

  • 您可以使用以下算术运算:+,-,*,/,()
  • 使用除法时,提醒必须等于0(6/3可以,但 6/4不好!)
  • 同一号码不能多次使用。 此外,您可以避免使用数字(例如,在我们的 上一个示例)

  • 有什么比写下所有的可能性并选择最接近的一个更好的解决方案吗?因为这个答案会迫使我写太多的代码,谢谢

    事实上,蛮力解决方案实际上并不是那么多代码

    (编辑:稍微更改了代码,因为一些规则没有得到适当考虑)

    但当然,由于交换性,其中许多是多余的

    可以很容易地避免在蛮力变体中检查的许多解决方案。第一步可能是避免创建包含可交换元素的节点,并可能为我在这里绘制的快速脏的
    节点
    类实现
    equals
    方法,该方法考虑了可交换性,然后使用节点的
    Set
    s而不是
    列表
    。此外,还可以进行“简单”、“低级别”的优化(例如,在找到完美匹配时提前返回)

    关于你的实际问题,是否有比暴力更“好”的解决方案:我的直觉是答案是“不”,但这取决于应该解决哪个问题。关键点在这里:假设您得到了一个可用数字的列表和所需的结果值。并假设不可能从给定的输入值创建结果值。例如,当你

    input = { 1,2,3,4,5,6 }
    result = 10000000000;
    
    我认为,为了真正证明这是不可能的,您必须枚举所有组合(最后返回“最佳”组合,这里可能是
    1*2*3*4*5*6
    )。如果您跳过任何组合,您如何确定它不是最好的组合


    但再一次:这只是一种直觉。也许有人更。。。数学上涉及。。。可以证明我错了……

    暴力解决方案没有那么多代码行,可能比更快的解决方案要少。如果任务是找到最佳答案,那么你必须考虑所有的可能性,只要用尽可能多的
    if
    语句来增强你的代码,以避免一些无用的计算。你总是得到6个数字来生成第一个吗?另外,仅仅出于好奇,这个问题是在什么情况下产生的?@G.Bach你总是得到6个数字和一个结果。我在一个数学机器人中发现了这个问题,它给了你这样一个问题,并要求你找到操作。我发现用一个程序解决这个问题很有趣。如果你的答案要求你写太多的代码行,那么你就错了。pathOP的第二条规则是只允许除法而不允许余数。是的,对不起,我已经在顶部添加了一个编辑,提到我忽略了这一点,我将根据
    a的解析调整代码,b>=2
    我们总是有
    ab>=a+b
    ,你能从你给出的值中得到的最大可能值是
    (1+2)*3*4*5*6
    。因为它小于
    10^10
    ,这就足以证明你不能从给定的值中“构建”该值。试过了(这就是为:D制作的程序),当然,你是对的:
    6*(5*(4*(3*(2+1'))))=1080
    是最大值。然而,像这样的陈述很难被概括(或者至少我认为人们可以很快接触到数论的本质部分…)很难判断是否允许负输入值,以及我们是否可以使用一元
    -
    (即乘以
    -1
    )。如果分数是允许的,我想也很难找到一个最大值。
    (2*(4+(5+(25+100)))) = 268
    (2*(4+(5+(100+25)))) = 268
    (2*(4+(25+(5+100)))) = 268
    (2*(4+(25+(100+5)))) = 268
    (2*(4+(100+(5+25)))) = 268
    (2*(4+(100+(25+5)))) = 268
    ((5*(4-(25-75)))-2) = 268
    ((5*(4+(75-25)))-2) = 268
    (2*(5+(4+(25+100)))) = 268
    ((5*(4+(25-(75-100))))-2) = 268
    ((5*(4-((75-100)-25)))-2) = 268
    ((5*(4+(25+(100-75))))-2) = 268
    ((5*(4+(25+(100-75))))-2) = 268
    ((5*(4+(25-(75-100))))-2) = 268
    ((5*(4-((75-100)-25)))-2) = 268
    ((5*(4+(75-25)))-2) = 268
    ((5*(4-(25-75)))-2) = 268
    ((5*(4-(75-(25+100))))-2) = 268
    ((5*(4+((25+100)-75)))-2) = 268
    ((5*(4-(75-(100+25))))-2) = 268
    ((5*(4+((100+25)-75)))-2) = 268
    (2*(5+(4+(100+25)))) = 268
    ((5*(4+(100+(25-75))))-2) = 268
    ((5*(4+(100-(75-25))))-2) = 268
    ((5*(4-((75-25)-100)))-2) = 268
    ((5*(4+(100-(75-25))))-2) = 268
    ((5*(4-((75-25)-100)))-2) = 268
    ((5*(4+(100+(25-75))))-2) = 268
    ((5*((4+75)-25))-2) = 268
    ((((4*75)-25)-5)-2) = 268
    (2*(5+(25+(4+100)))) = 268
    ((5*(25+(4-(75-100))))-2) = 268
    ((5*(25-((75-100)-4)))-2) = 268
    ((5*(25+(4+(100-75))))-2) = 268
    ((5*(25+(4+(100-75))))-2) = 268
    ((5*(25+(4-(75-100))))-2) = 268
    ((5*(25-((75-100)-4)))-2) = 268
    ((5*((75+4)-25))-2) = 268
    ((((75*4)-25)-5)-2) = 268
    ((5*(25-(75-(4+100))))-2) = 268
    ((5*(25+((4+100)-75)))-2) = 268
    ((5*(25-(75-(100+4))))-2) = 268
    ((5*(25+((100+4)-75)))-2) = 268
    (2*(5+(25+(100+4)))) = 268
    ((5*(25+(100+(4-75))))-2) = 268
    ((5*(25+(100-(75-4))))-2) = 268
    ((5*(25-((75-4)-100)))-2) = 268
    ((5*(25+(100-(75-4))))-2) = 268
    ((5*(25-((75-4)-100)))-2) = 268
    ((5*(25+(100+(4-75))))-2) = 268
    ((5*(75+(4-25)))-2) = 268
    ((5*(75-(25-4)))-2) = 268
    ((5*((4+(25+100))-75))-2) = 268
    ((5*((4+(100+25))-75))-2) = 268
    ((5*(75-(25-4)))-2) = 268
    ((5*(75+(4-25)))-2) = 268
    ((5*((25+(4+100))-75))-2) = 268
    ((5*((25+(100+4))-75))-2) = 268
    ((5*((100+(4+25))-75))-2) = 268
    (((75+(100+(4*25)))-5)-2) = 268
    ((5*((100+(25+4))-75))-2) = 268
    (((75+(100+(25*4)))-5)-2) = 268
    (2*(5+(100+(4+25)))) = 268
    ((5*(100+(4+(25-75))))-2) = 268
    ((5*(100+(4-(75-25))))-2) = 268
    ((5*(100-((75-25)-4)))-2) = 268
    ((5*(100+(4-(75-25))))-2) = 268
    ((5*(100-((75-25)-4)))-2) = 268
    ((5*(100+(4+(25-75))))-2) = 268
    (2*(5+(100+(25+4)))) = 268
    ((5*(100+(25+(4-75))))-2) = 268
    ((5*(100+(25-(75-4))))-2) = 268
    ((5*(100-((75-4)-25)))-2) = 268
    ((5*(100+(25-(75-4))))-2) = 268
    ((5*(100-((75-4)-25)))-2) = 268
    ((5*(100+(25+(4-75))))-2) = 268
    ((5*(100-(75-(4+25))))-2) = 268
    ((5*(100+((4+25)-75)))-2) = 268
    (((100+(75+(4*25)))-5)-2) = 268
    ((5*(100-(75-(25+4))))-2) = 268
    ((5*(100+((25+4)-75)))-2) = 268
    (((100+(75+(25*4)))-5)-2) = 268
    (2*(25+(4+(5+100)))) = 268
    (2*(25+(4+(100+5)))) = 268
    ((((4*75)-5)-25)-2) = 268
    (2*(25+(5+(4+100)))) = 268
    ((((75*4)-5)-25)-2) = 268
    (2*(25+(5+(100+4)))) = 268
    (2*(25+(100+(4+5)))) = 268
    (2*(25+(100+(5+4)))) = 268
    ((((5*(4+75))-100)-25)-2) = 268
    ((((5*(75+4))-100)-25)-2) = 268
    ((75-(5-(100+(4*25))))-2) = 268
    ((75+((100+(4*25))-5))-2) = 268
    ((75-(5-(100+(25*4))))-2) = 268
    ((75+((100+(25*4))-5))-2) = 268
    ((75+(100-(5-(4*25))))-2) = 268
    ((75-((5-(4*25))-100))-2) = 268
    ((75+(100+((4*25)-5)))-2) = 268
    ((75+(100-(5-(25*4))))-2) = 268
    ((75-((5-(25*4))-100))-2) = 268
    ((75+(100+((25*4)-5)))-2) = 268
    (2*(100+(4+(5+25)))) = 268
    (2*(100+(4+(25+5)))) = 268
    (2*(100+(5+(4+25)))) = 268
    (2*(100+(5+(25+4)))) = 268
    ((100-(5-(75+(4*25))))-2) = 268
    ((100+((75+(4*25))-5))-2) = 268
    ((100-(5-(75+(25*4))))-2) = 268
    ((100+((75+(25*4))-5))-2) = 268
    (2*(100+(25+(4+5)))) = 268
    (2*(100+(25+(5+4)))) = 268
    ((((5*(4+75))-25)-100)-2) = 268
    ((((5*(75+4))-25)-100)-2) = 268
    ((100+(75-(5-(4*25))))-2) = 268
    ((100-((5-(4*25))-75))-2) = 268
    ((100+(75+((4*25)-5)))-2) = 268
    ((100+(75-(5-(25*4))))-2) = 268
    ((100-((5-(25*4))-75))-2) = 268
    ((100+(75+((25*4)-5)))-2) = 268
    (((100*((75-5)-2))/25)-4) = 268
    (((100*((75-5)-2))/25)-4) = 268
    (((100*((75-2)-5))/25)-4) = 268
    (((100*((75-2)-5))/25)-4) = 268
    (((100*(75-(2+5)))/25)-4) = 268
    (((100*(75-(5+2)))/25)-4) = 268
    (4*(75-(2*(100/25)))) = 268
    (4*(75-(2*(100/25)))) = 268
    (4*(75-((2*100)/25))) = 268
    (4*(75-((100*2)/25))) = 268
    ((((4*75)-25)-2)-5) = 268
    ((((75*4)-25)-2)-5) = 268
    (((75+(100+(4*25)))-2)-5) = 268
    (((75+(100+(25*4)))-2)-5) = 268
    (((100+(75+(4*25)))-2)-5) = 268
    (((100+(75+(25*4)))-2)-5) = 268
    ((((4*75)-2)-25)-5) = 268
    ((((75*4)-2)-25)-5) = 268
    ((75-(2-(100+(4*25))))-5) = 268
    ((75+((100+(4*25))-2))-5) = 268
    ((75-(2-(100+(25*4))))-5) = 268
    ((75+((100+(25*4))-2))-5) = 268
    ((75+(100-(2-(4*25))))-5) = 268
    ((75-((2-(4*25))-100))-5) = 268
    ((75+(100+((4*25)-2)))-5) = 268
    ((75+(100-(2-(25*4))))-5) = 268
    ((75-((2-(25*4))-100))-5) = 268
    ((75+(100+((25*4)-2)))-5) = 268
    ((100-(2-(75+(4*25))))-5) = 268
    ((100+((75+(4*25))-2))-5) = 268
    ((100-(2-(75+(25*4))))-5) = 268
    ((100+((75+(25*4))-2))-5) = 268
    ((100+(75-(2-(4*25))))-5) = 268
    ((100-((2-(4*25))-75))-5) = 268
    ((100+(75+((4*25)-2)))-5) = 268
    ((100+(75-(2-(25*4))))-5) = 268
    ((100-((2-(25*4))-75))-5) = 268
    ((100+(75+((25*4)-2)))-5) = 268
    ((((4*75)-5)-2)-25) = 268
    ((((75*4)-5)-2)-25) = 268
    ((((5*(4+75))-100)-2)-25) = 268
    ((((5*(75+4))-100)-2)-25) = 268
    ((((4*75)-2)-5)-25) = 268
    ((((75*4)-2)-5)-25) = 268
    ((75+(2*(4+(5+100))))-25) = 268
    ((75+(2*(4+(100+5))))-25) = 268
    ((75+(2*(5+(4+100))))-25) = 268
    ((75+(2*(5+(100+4))))-25) = 268
    ((75+(2*(100+(4+5))))-25) = 268
    ((75+(2*(100+(5+4))))-25) = 268
    ((((5*(4+75))-2)-100)-25) = 268
    ((((5*(75+4))-2)-100)-25) = 268
    ((100*(75-(2*4)))/25) = 268
    ((100*(75-(4*2)))/25) = 268
    (75-(2+(5-(100+(4*25))))) = 268
    (75-(2-((100+(4*25))-5))) = 268
    (75+(((100+(4*25))-5)-2)) = 268
    (75-(2+(5-(100+(25*4))))) = 268
    (75-(2-((100+(25*4))-5))) = 268
    (75+(((100+(25*4))-5)-2)) = 268
    (75-(2-(100-(5-(4*25))))) = 268
    (75+((100-(5-(4*25)))-2)) = 268
    (75-(2+((5-(4*25))-100))) = 268
    (75-(2-(100+((4*25)-5)))) = 268
    (75+((100+((4*25)-5))-2)) = 268
    (75-(2-(100-(5-(25*4))))) = 268
    (75+((100-(5-(25*4)))-2)) = 268
    (75-(2+((5-(25*4))-100))) = 268
    (75-(2-(100+((25*4)-5)))) = 268
    (75+((100+((25*4)-5))-2)) = 268
    (75-(5+(2-(100+(4*25))))) = 268
    (75-(5-((100+(4*25))-2))) = 268
    (75+(((100+(4*25))-2)-5)) = 268
    (75-(5+(2-(100+(25*4))))) = 268
    (75-(5-((100+(25*4))-2))) = 268
    (75+(((100+(25*4))-2)-5)) = 268
    (75-(5-(100-(2-(4*25))))) = 268
    (75+((100-(2-(4*25)))-5)) = 268
    (75-(5+((2-(4*25))-100))) = 268
    (75-(5-(100+((4*25)-2)))) = 268
    (75+((100+((4*25)-2))-5)) = 268
    (75-(5-(100-(2-(25*4))))) = 268
    (75+((100-(2-(25*4)))-5)) = 268
    (75-(5+((2-(25*4))-100))) = 268
    (75-(5-(100+((25*4)-2)))) = 268
    (75+((100+((25*4)-2))-5)) = 268
    (75-(25-(2*(4+(5+100))))) = 268
    (75+((2*(4+(5+100)))-25)) = 268
    (75-(25-(2*(4+(100+5))))) = 268
    (75+((2*(4+(100+5)))-25)) = 268
    (75-(25-(2*(5+(4+100))))) = 268
    (75+((2*(5+(4+100)))-25)) = 268
    (75-(25-(2*(5+(100+4))))) = 268
    (75+((2*(5+(100+4)))-25)) = 268
    (75-(25-(2*(100+(4+5))))) = 268
    (75+((2*(100+(4+5)))-25)) = 268
    (75-(25-(2*(100+(5+4))))) = 268
    (75+((2*(100+(5+4)))-25)) = 268
    (75+(100-(2+(5-(4*25))))) = 268
    (75-((2+(5-(4*25)))-100)) = 268
    (75+(100-(2-((4*25)-5)))) = 268
    (75-((2-((4*25)-5))-100)) = 268
    (75+(100+(((4*25)-5)-2))) = 268
    (75+(100-(2+(5-(25*4))))) = 268
    (75-((2+(5-(25*4)))-100)) = 268
    (75+(100-(2-((25*4)-5)))) = 268
    (75-((2-((25*4)-5))-100)) = 268
    (75+(100+(((25*4)-5)-2))) = 268
    (75+(100-(5+(2-(4*25))))) = 268
    (75-((5+(2-(4*25)))-100)) = 268
    (75+(100-(5-((4*25)-2)))) = 268
    (75-((5-((4*25)-2))-100)) = 268
    (75+(100+(((4*25)-2)-5))) = 268
    (75+(100-(5+(2-(25*4))))) = 268
    (75-((5+(2-(25*4)))-100)) = 268
    (75+(100-(5-((25*4)-2)))) = 268
    (75-((5-((25*4)-2))-100)) = 268
    (75+(100+(((25*4)-2)-5))) = 268
    (100+(2*(4+(5+75)))) = 268
    (100+(2*(4+(75+5)))) = 268
    (100+(2*(4+(75+(25/5))))) = 268
    (100+(2*(4+(75+(25/5))))) = 268
    (100+(2*(5+(4+75)))) = 268
    (100+(2*(5+(75+4)))) = 268
    (100-(2+(5-(75+(4*25))))) = 268
    (100-(2-((75+(4*25))-5))) = 268
    (100+(((75+(4*25))-5)-2)) = 268
    (100-(2+(5-(75+(25*4))))) = 268
    (100-(2-((75+(25*4))-5))) = 268
    (100+(((75+(25*4))-5)-2)) = 268
    ((((5*(4+75))-25)-2)-100) = 268
    ((((5*(75+4))-25)-2)-100) = 268
    (100+(2*(75+(4+5)))) = 268
    (100+(2*(75+(4+(25/5))))) = 268
    (100+(2*(75+(4+(25/5))))) = 268
    (100+(2*(75+(5+4)))) = 268
    (100-(2-(75-(5-(4*25))))) = 268
    (100+((75-(5-(4*25)))-2)) = 268
    (100-(2+((5-(4*25))-75))) = 268
    (100-(2-(75+((4*25)-5)))) = 268
    (100+((75+((4*25)-5))-2)) = 268
    (100-(2-(75-(5-(25*4))))) = 268
    (100+((75-(5-(25*4)))-2)) = 268
    (100-(2+((5-(25*4))-75))) = 268
    (100-(2-(75+((25*4)-5)))) = 268
    (100+((75+((25*4)-5))-2)) = 268
    (100+(4*(2+(25+(75/5))))) = 268
    (100+(4*(2+(25+(75/5))))) = 268
    (100+(4*(25+(2+(75/5))))) = 268
    (100+(4*(25+(2+(75/5))))) = 268
    (100-(5+(2-(75+(4*25))))) = 268
    (100-(5-((75+(4*25))-2))) = 268
    (100+(((75+(4*25))-2)-5)) = 268
    (100-(5+(2-(75+(25*4))))) = 268
    (100-(5-((75+(25*4))-2))) = 268
    (100+(((75+(25*4))-2)-5)) = 268
    (100-(5-(75-(2-(4*25))))) = 268
    (100+((75-(2-(4*25)))-5)) = 268
    (100-(5+((2-(4*25))-75))) = 268
    (100-(5-(75+((4*25)-2)))) = 268
    (100+((75+((4*25)-2))-5)) = 268
    (100-(5-(75-(2-(25*4))))) = 268
    (100+((75-(2-(25*4)))-5)) = 268
    (100-(5+((2-(25*4))-75))) = 268
    (100-(5-(75+((25*4)-2)))) = 268
    (100+((75+((25*4)-2))-5)) = 268
    ((((5*(4+75))-2)-25)-100) = 268
    ((((5*(75+4))-2)-25)-100) = 268
    (100+(75-(2+(5-(4*25))))) = 268
    (100-((2+(5-(4*25)))-75)) = 268
    (100+(75-(2-((4*25)-5)))) = 268
    (100-((2-((4*25)-5))-75)) = 268
    (100+(75+(((4*25)-5)-2))) = 268
    (100+(75-(2+(5-(25*4))))) = 268
    (100-((2+(5-(25*4)))-75)) = 268
    (100+(75-(2-((25*4)-5)))) = 268
    (100-((2-((25*4)-5))-75)) = 268
    (100+(75+(((25*4)-5)-2))) = 268
    (100+(75-(5+(2-(4*25))))) = 268
    (100-((5+(2-(4*25)))-75)) = 268
    (100+(75-(5-((4*25)-2)))) = 268
    (100-((5-((4*25)-2))-75)) = 268
    (100+(75+(((4*25)-2)-5))) = 268
    (100+(75-(5+(2-(25*4))))) = 268
    (100-((5+(2-(25*4)))-75)) = 268
    (100+(75-(5-((25*4)-2)))) = 268
    (100-((5-((25*4)-2))-75)) = 268
    (100+(75+(((25*4)-2)-5))) = 268
    
    input = { 1,2,3,4,5,6 }
    result = 10000000000;