mathematica解决填符号使等式成立问题在网上曾经看到过一个高手用列举法解决一个(34口5口6口8口9口1)口2=2008在口中填入加减乘使等式成立程序如下,但是如果题目要求填入加减乘除和括号,程序
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/19 19:25:46
mathematica解决填符号使等式成立问题在网上曾经看到过一个高手用列举法解决一个(34口5口6口8口9口1)口2=2008在口中填入加减乘使等式成立程序如下,但是如果题目要求填入加减乘除和括号,程序
mathematica解决填符号使等式成立问题
在网上曾经看到过一个高手用列举法解决一个
(34口5口6口8口9口1)口2=2008
在口中填入加减乘使等式成立
程序如下,但是如果题目要求填入加减乘除和括号,程序要怎么改进啊
比如(5+5+5)÷5+5=8,即5 5 5 5 5=8填入相应符号
info = expr[{"+"},{"-"},{"*"}];
For [a = 1,a < 4,a++,
For [b = 1,b < 4,b++,
For [c = 1,c < 4,c++,
For [d = 1,d < 4,d++,
For [e = 1,e < 4,e++,
For [f = 1,f < 4,f++,
temp =
StringJoin["(34",Part[info,a],"5",Part[info,b],"6",
Part[info,c],"8",Part[info,d],"9",Part[info,e],"1)",
Part
[info,f],"2"]; If [ToExpression[temp] == 2008,Print[temp]]
]]]]]]
mathematica解决填符号使等式成立问题在网上曾经看到过一个高手用列举法解决一个(34口5口6口8口9口1)口2=2008在口中填入加减乘使等式成立程序如下,但是如果题目要求填入加减乘除和括号,程序
你这题目其实有点歧义,要知道,在小学高年级我们就已知道,乘号在很多场合是可以省略的,那么你这里允不允许呢?我就当它允许了,那么,不算很难:
Select[Tuples[{"+", "-", "*", "/", "(", ")"}, 6], ToExpression@StringJoin["(34", #[[1]], "5", #[[2]], "6", #[[3]], "8", #[[4]], "9", #[[5]], "1)", #[[6]], "2==2008"] &]
运行的过程中会有一些警告信息,因为会产生许多不合语法的表达式,不过没关系,反正最后得出来两组
{{"*", "*", "-", "-", "+", "*"}, {"(", ")", "-", "-", "+", "*"}}
即
{"(34*5*6-8-9+1)*2", "(34(5)6-8-9+1)*2"}
看样子我多担心了,放宽了也就两组解,额外产生的也就一组,就是第二组解.
————————
仔细一看,发现我好像并没把问题给解决……你这是允许一个位子填复数个符号啊,那我暂时没灵感,容我再想想……