手机版

excel如何从矩阵数组中返回所有满足条件的组合?

时间:2021-09-28 来源:互联网 编辑:宝哥软件园 浏览:

如下图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;三

版权声明:excel如何从矩阵数组中返回所有满足条件的组合?是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。