如何在 Excel 上找到最高的三位数“特殊”数字?

如何在 Excel 上找到最高的三位数“特殊”数字?

我尝试使用 Excel 查找最高的 3 位数字,该数字的各位数字的立方和等于该数字本身,例如:3^3 + 7^3 + 1^3 = 371

答案1

数组公式**

=99+MATCH(1,0/(MMULT(MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)^3,{1;1;1})=ROW(INDEX(A:A,100):INDEX(A:A,999))))

作为解释,以下部分:

ROW(INDEX(A:A,100):INDEX(A:A,999))

生成一个从 100 到 999 的整数数组(含 100 和 999)。它是严格且最小易失性的(事实上,据我所知,仅在工作簿打开时易失性:http://www.decisionmodels.com/calcsecretsi.htm) 构造,因此,它比完全挥发性构造更可取:

ROW(INDIRECT("100:999"))

非易失性,尽管不严格(即易受工作表内行插入的影响):

ROW(100:999)

(或者ROW($100:$999)- 使用绝对引用不会以任何方式影响上述敏感性。)

由于我们希望考虑这 900 个条目中的每个 3 位数字,因此我们使用MID一个数组起始编号参数,例如:

MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)

即:

MID({100;101;102;103;104;105;...;999},{1,2,3},1)

IE

{"1","0","0";"1","0","1";"1","0","2";"1","0","3";"1","0","4";"1","0","5";,,,;"9","9","9"}

然后我们取每个值的立方,如下:

MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)^3

即:

{"1","0","0";"1","0","1";"1","0","2";"1","0","3";"1","0","4";"1","0","5";,,,;"9","9","9"}^3

给出:

{1,0,0;1,0,1;1,0,8;1,0,27;1,0,64;1,0,125;,,,;729,729,729}

MMULT然后使用该值对该数组中的 900 个三元组求和,得到:

MMULT(MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)^3,{1;1;1})

即:

MMULT({1,0,0;1,0,1;1,0,8;1,0,27;1,0,64;1,0,125;,,,;729,729,729},{1;1;1})

IE:

{1;2;9;28;65;126;,,,;2187}

剩下的就是确定结果数组中的值等于原始值本身的最后一个(即最大)出现次数,以便比较:

MMULT(MID(ROW(INDEX(A:A,100):INDEX(A:A,105)),{1,2,3},1)^3,{1;1;1})=ROW(INDEX(A:A,100):INDEX(A:A,999))

即:

{1;2;9;28;65;126;,,,;2187}={100;101;102;103;104;105;,,,;999}

IE:

{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;,,,;FALSE}

将此数组与零进行倒数运算得出:

{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;,,,;#DIV/0!}

即,其条目仅为 1(如果往复之前的条目是TRUE)或#DIV/0!(如果往复之前的条目是FALSE)的数组。

因此,当我们现在将此数组传递MATCH比赛类型参数 1(或者,等效地,省略),它具有合适的形式,以便我们可以返回小于我们选择的最后一个数值的相对位置查找值(这里为 1,但任何大于零的数值也足够)。

因此:

MATCH(1,0/(MMULT(MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)^3,{1;1;1})=ROW(INDEX(A:A,100):INDEX(A:A,999))))

即:

MATCH(1,{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;,,,;#DIV/0!})

返回 308。

由于我们传递的供考虑的数组从 100 开始,而不是 1,因此我们当然必须在这个值上加 99,这样:

99+MATCH(1,0/(MMULT(MID(ROW(INDEX(A:A,100):INDEX(A:A,999)),{1,2,3},1)^3,{1;1;1})=ROW(INDEX(A:A,100):INDEX(A:A,999))))

99+308

返回 407,因此我得出结论,这是对 OP 问题的答案。

问候

**数组公式的输入方式与“标准”公式不同。您不必直接按 ENTER,而是先按住 CTRL 和 SHIFT,然后按 ENTER。如果您操作正确,您会注意到 Excel 在公式周围放置了花括号 {}(但不要尝试自己手动插入这些括号)。

相关内容