我尝试使用 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 在公式周围放置了花括号 {}(但不要尝试自己手动插入这些括号)。