最近提出的问题上的一个转折,给出了一个运算符和结果的列表,您需要找到整数,当这些运算符对其操作时,就会生成结果。
输入
+ + * / 13
可能输出
4 8 2 2 4
这意味着4 + 8 + 2 * 2 / 4 = 13
。
更具体地说,您将得到N个运算符的序列(包含在1到5之间)和一个整数结果,空格分开。必须打印N+1整数,空格分隔,范围从1到9,包括与运算符交互时产生的结果。
操作人员为+,-,*,/
。它们具有自然优先顺序(*
和/
在+
和-
之前,左结合)。除法必须是积分除法,不允许带有分数结果的除法。运算符必须按照给定的顺序显示。
大多数问题将有一个以上的解决方案。打印其中的任何一个,或其中的任何一个子集,都是可以的。如果没有解决方案,请打印NO SOLUTION
。
输入
/ + - - 16
输出
9 1 9 1 1
输入
+ 5
输出
1 4
2 3
3 2
4 1
(或这些行的任何非空子集)
输入
+ + 30
输出
NO SOLUTION
输入
/ + / 3
输出
6 3 5 5
注意,3 2 3 2
不是一个解决方案,因为3/2+3/2=3
是真的,但是每个除法都有小数值。
标准代码高尔夫,最短答案获胜。
发布于 2012-06-21 19:28:41
val o=args.init
val e=args.last
val n=(1 to 9)
val i=new bsh.Interpreter
def b(o:Array[String],s:String=""):Boolean={
if(s.isEmpty)n.exists(y=>b(o,s+y))else
if(o.isEmpty){
val r=i.eval(s)
if(r.toString==e){
println(s.replaceAll("[-*+/]"," "))
true}else false}else
n.exists(x=>b(o.tail,s+o(0)+x))
}
b(o)||{println("NO SOLUTION");true}
https://codegolf.stackexchange.com/questions/6426
复制