假设我有一个如下值列表:
1
2
3
4
5
6
我想找到涉及此列表的连续成员的每个组合,例如:
(
// every combination of one element
1, 2, 3, 4, 5, 6,
// every combination of two con. elements
1+2, 2+3, 3+4, 4+5, 5+6,
// every combination of three con. elements
1+2+3, 2+3+4, 3+4+5, 4+5+6,
// every combination of four con. elements
1+2+3+4, 2+3+4+5, 3+4+5+6,
// every combination of five con.elements
1+2+3+4+5, 2+3+4+5+6,
// every combination of six con. elements
1+2+3+4+5+6,
)
如您所见,有n(n+1)/2
多种这样的组合。我可以使用任何 Excel 公式来找到它,理想情况下将其显示为表格,每个组合占一行。
如果您的数字在范围内,
A1:A6
您可以使用:=TEXTSPLIT(TEXTJOIN("-",,MAP(A1:A6,LAMBDA(a,TEXTJOIN("-",,MAP(a:A6,LAMBDA(b,TEXTJOIN("+",,a:b))))))&"-"),,"-",1)
如果您不想使用范围:
=LET(n,6,s,SEQUENCE,DROP(REDUCE("",s(n),LAMBDA(a,b,TOCOL(VSTACK(a,BYROW(s(,n,b)/(s(,n,b)<=s(6)),LAMBDA(b,TEXTJOIN("+",,TOROW(b,2))))),2))),1))
或者跳过 REDUCE:
=LET(s,SEQUENCE(,6),SORT(TOCOL(TEXTAFTER(BYROW(IF(s<=TOCOL(s),"+"&s,""),CONCAT),"+",s),2)))
SORT
(如果顺序不重要,你也可以删除)返回这些组合的总和而不是组合本身:
=--TEXTSPLIT(ARRAYTOTEXT(MAP(A3:A34,LAMBDA(a,ARRAYTOTEXT(MAP(a:A34,LAMBDA(b,SUM(a:b))))))),,",")