很多人都想问这种极复杂的公式是如何写出来,并且还能保证不出错正常运行的:
=LET(p,UNIQUE(REDUCE(0,REDUCE({"((A#A)#A)#A";"(A#(A#A))#A";"(A#A)#(A#A)";"A#((A#A)#A)";"A#(A#(A#A))"},ROW(1:3),LAMBDA(s,n,TOCOL(SUBSTITUTE(s,"#",{"+","-","*","/"},1)))),LAMBDA(s,n,VSTACK(s,MAP(REDUCE(1,ROW(2:4),LAMBDA(s,n,TOCOL(REPLACE(s,SEQUENCE(,n),,n)))),LAMBDA(x,TEXTJOIN(INDEX(E5:H5,MID(x,{1,2,3,4},1)),0,TEXTSPLIT(n,"A"))))))))&"=24",FILTER(p,IFERROR(EV(p),),"无解"))
这个是计算24点的,只要在E5:H5输入四个数就可以计算出所有24点的解法,如果无解就显示无解。
这种公式显然不是一点一点打字打上去的,而是多个公式拼接起来的。这也是解决问题的常见思路:将问题分解为多个小问题,然后逐个击破。
=LET(p,UNIQUE(REDUCE(0,REDUCE({"((A#A)#A)#A";"(A#(A#A))#A";"(A#A)#(A#A)";"A#((A#A)#A)";"A#(A#(A#A))"},ROW(1:3),LAMBDA(s,n,TOCOL(SUBSTITUTE(s,"#",{"+","-","*","/"},1)))),LAMBDA(s,n,VSTACK(s,MAP(REDUCE(1,ROW(2:4),LAMBDA(s,n,TOCOL(REPLACE(s,SEQUENCE(,n),,n)))),LAMBDA(x,TEXTJOIN(INDEX(E5:H5,MID(x,{1,2,3,4},1)),0,TEXTSPLIT(n,"A"))))))))&"=24",FILTER(p,IFERROR(EV(p),),"无解"))
这个是计算24点的,只要在E5:H5输入四个数就可以计算出所有24点的解法,如果无解就显示无解。
这种公式显然不是一点一点打字打上去的,而是多个公式拼接起来的。这也是解决问题的常见思路:将问题分解为多个小问题,然后逐个击破。