如下图1所示,在4行4列的单元格区域A1:D4中,每个单元格都是一位整数,目标值单元格(此处为F2)也是整数。需要在单元格G2中写一个公式来返回单元格a13360d4中四个不同值的组合数。条件如下:
1.这四个值的总和等于F2中的值。
2.这四个值位于不同的行和列中。
图1
下图显示了满足图1示例中条件的六种组合。
图2。
先不看答案,自己试试。
公式
单元格G2中的数组公式为:
=SUM(0(MMULT(IFERROR(N(OFFSET(A1),IF(MMULT(0)(is number(FIND({ 1,2,3,4}),ROW(inquisitive(" 1234:4321 ")))))))),{ 1;1;1;1})=4,MID(ROW(INternet(" 1234:4321 ")),{1,2,3,4},1)-1,"",{0,1,2,3},)),0),{ 1;1;1;1})=F2))
公式分析
这种情况的条件是:在给定的单元格区域中选择四个单元格,并且它们的和等于目标值,并且这四个单元格在同一行和同一列中互不相同。这意味着结果以下列组合产生:
=A1 B2 C3 D4=A2 B1 C3 D4=A3 B1 C2 D4=A4 B1 C2 D3
=A1 B2 C4 D3=A2 B1 C4 D3=A3 B1 C4 D2=A4 B1 C3 D2
=A1 B3 C2 D4=A2 B3 C1 D4=A3 B2 C1 D4=A4 B2 C1 D3
=A1 B3 C4 D2=A2 B3 C4 D1=A3 B2 C4 D1=A4 B2 C3 D1
=A1 B4 C2 D3=A2 B4 C1 D3=A3 B4 C1 D2=A4 B3 C1 D2
=A1 B4 C3 D2=A2 B4 C3 D1=A3 B4 C2 D1=A4 B3 C2 D1
有24种组合。组合数为n!4行4列,就是4!=24。
现在,查看上面给出的24个和,我们可以推断它们可以使用OFFSET获得,即:
=A1 B2 C3 D4
相当于:
=SUM(N(OFFSET(A1,{0,1,2,3},{0,1,2,3}))
同样地:
=A2 B1 C3 D4
相当于:
=SUM(N(OFFSET(A1,{1,0,2,3},{0,1,2,3}))
同样地:
=A3 B1
相当于:
=SUM(N(OFFSET(A1,{2,0,1,3},{0,1,2,3}))
……
等等。
关键是参数cols固定为array {0,1,2,3},这显然意味着四个元素组合中的每一个都将分别来自四个不同的列,然后传递给参数行的数组被转换,即满足没有两个元素在同一行的条件的所有可能的置换。因此,当这24行参数传递给OFFSET时,结果将等于前面给出的24个和,即集合{0,1,2,3}的24个可能排列,即:
{0,1,2,3} {1,0,2,3} {2,0,1,3} {3,0,1,2}
{0,1,3,2} {1,0,3,2} {2,0,3,1} {3,0,2,1}
{0,2,1,3} {1,2,0,3} {2,1,0,3} {3,1,0,2}
{0,2,3,1} {1,2,3,0} {2,1,3,0} {3,1,2,0}
{0,3,1,2} {1,3,0,2} {2,3,0,1} {3,2,0,1}
{0,3,2,1} {1,3,2,0} {2,3,1,0} {3,2,1,0}
现在,我们有24个独立的总和要计算。但是,我们并不局限于将一维数组传递给OFFSET函数:如果我们能够以某种方式生成一个数组,那么这个数组将由上述四个元素组成的所有数组组成。阵列如下:
{0,1,2,3;1,0,2,3;2,0,1,3;3,0,1,2;0,1,3,2;1,0,3,2;2,0,3,1;3,0,2,1;0,2,1,3;1,2,0,3;2,1,0,3;3,1,0,2;0,2,3,1;1,2,3,0;2,1,3,0;3,1,2,0;0,3,1,2;1,3,0,2;2,3,0,1;3,2,0,1;0,3,2,1;1,3,2,0;2,3,1,0;3,2,1,0}
由24行4列组成的数组,其中每一行等于上面给出的24个排列之一,然后传递给OFFSET函数,实现所有24个数组的同时处理。
事实上,这就是为什么有些解决方案将定义安排如下:
={1234;1243;1324;1342;1423;1432;2134;2143;2314;2341;2413;2431;3124;3142;3214;三