任务是在n -number A 中找到(n-1) 个运算符 (+,-,*) 的所有可能组合,因此表达式的结果等于数字 B。表达式从左到右计算。例如:
We have number A=123 and B=5 : 1*2+3=5
我猜这个任务可能与波兰符号和解析器的一些使用有关。所以它就像:我得到数字 123,将其设为字符串“3 2 1”,然后尝试所有可能的运算符组合,例如:“3 2 1 + +”“3 2 1 - -”“3 2 1 * *" "3 2 1 * -" 等并检查它是否等于 5。但问题是我真的不明白如何正确找到所有组合。我还编写了一个函数,该函数使数字字符串成为计算表达式的函数,例如“3 2 1 * +”。
exprCounting :: String -> Integer
exprCounting = head . foldl stackAnalyzing [] . words
where
stackAnalyzing (x:y:ss) "+" = (x+y):ss
stackAnalyzing (x:y:ss) "-" = (y-x):ss
stackAnalyzing (x:y:ss) "*" = (x*y):ss
stackAnalyzing ss number = read number : ss
toWordString :: Integer -> String
toWordString = addSpace . show
where
addSpace [] = []
addSpace (x:xs) = [x] ++ " " ++ addSpace xs
所以任何人都可以给我关于解决这个任务的方法或我应该使用什么工具的建议。