Excel函数解决查找任意n个数字之和:分而治之
在上一次的文章中,我们介绍了一种可以查找任意多个数字,使其合计等于给定值x的方法。这个方法的本质就是将问题变为更小一些的问题:
原问题:从原来的50个数中查找n个元素,其合计等于x。
新问题:从49个数中查找n-1个元素,其合计等于x-a。
这个思路启发了我们,可以使用分而治之(或减而治之)的方法解决这个问题。
分支法
我们的问题是在一个数组arr中,找到n个元素,使得它们的合计等于x
假设存在这样一个函数的话,这个问题可以这么记:
=FIND_ANY_NUMBER(arr, n, x)
我们可以将这个数组分为左右两部分:
左半部分只有一个元素,右半部分有n-1个元素。
原问题可以分为两种情况。
所有的n个元素都在右半部分:
即:
FIND_ANY_NUMBER(arr, n, x) = FIND_ANY_NUMBER(arr_right, n, x)
2. 左半部分是其中的一个元素,其余n-1个元素在右半部分中,这时右边的n-1个元素合计为 :x - 左半部分元素
即:
FIND_ANY_NUMBER(arr, n, x) = HSTACK(arr_left, FIND_ANY_NUMBER(arr_right, n - 1, x arr_left)
这样,我们就可以使用递归了。
一直到在一个数组中查找1个元素,问题可以用MATCH函数简单解决,递归结束。
自定义函数
这样,就可以创建下面的自定义函数:
FIND_ANY_NUMBER = LAMBDA(arr, n, x,
IF(
n > COUNTA(arr), //如果要找的元素个数n大于数组元素个数,则无解
-1,
IF(
n = 1, //如果要找一个元素,
LET(
i, IFERROR(MATCH(x, arr, 1), -1),
IF(
i = -1, //没有找到
-1,
IF(
INDEX(arr, i) <> x, //找到的不是目标值
-1,
INDEX(arr, i)//k i
)
)
),
//否则的话,分为两种情况
LET(
result, FIND_ANY_NUMBER(DROP(arr, 1), n, x),
IF(
SUM(--(result = -1)) = 0, //成功了
result,
//HSTACK(k 1, FIND_ANY_NUMBER(DROP(arr, 1), n - 1, x - INDEX(arr, k 1), k 1))
HSTACK(INDEX(arr, 1), FIND_ANY_NUMBER(DROP(arr, 1), n - 1, x - INDEX(arr, 1)))
)
)
)
));
解释一下:
函数的输入参数是一个数组arr,要查找的元素个数n,以及要查找的元素x。函数使用IF语句进行条件分支:如果要查找的元素个数n大于数组元素个数,则无解,返回-1。如果要查找的元素个数n等于1,则查找一个元素。在这种情况下,如果找到了目标值,则返回其索引,否则返回-1。如果要查找的元素个数n大于1,则查找多个元素。在这种情况下,函数会对数组进行递归调用,将数组中的第一个元素删除,并将查找数量减少1。如果递归调用返回-1,则表示没有找到目标值,函数将返回-1。否则,如果递归调用返回非-1的结果,则将其返回。如果递归调用返回多个结果,则将它们与数组中的第一个元素的索引组合成一个水平堆栈(HSTACK),并将其返回。
详细解释请看视频
加入E学会,学习更多Excel应用技巧
/portal/learn/class_list
详情咨询客服(底部菜单-知识库-客服)
Excel Power Query Power Pivot Power BI
Power Excel 知识库
按照以下方式进入知识库学习Excel函数 底部菜单:知识库->Excel函数
自定义函数 底部菜单:知识库->自定义函数
Excel如何做 底部菜单:知识库->Excel如何做
面授培训 底部菜单:培训学习->面授培训
Excel企业应用 底部菜单:企业应用
也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。
4个极品网站!必须要看
hello大家好,这里是日常爆肝更新的老Y工作室。今天继续给大家分享有趣好玩的网站,同样的带来4个。时常有朋友问老Y在哪里去找这么多网站,还有朋友想向老Y学的,其实老Y没有固定的找网站的网站,都是在网上瞎逛,新闻类、论坛都会逛逛,其实摸鱼多了总会发现的01、开源计算机书籍网址:/grindgold/pdf站长网2023-07-28 12:47:120003在ps中自定形状工具的使用方法及自定形状工具的用途?
自定义形状工具是Photoshop中一个非常有用的工具,它可以让你快速地创建各种形状,例如箭头、星形、心形等等。下面是自定义形状工具的使用方法:打开Photoshop,选择自定义形状工具。在工具栏上方的选项栏中,选择一个形状。在画布上按住鼠标左键并拖动,创建一个形状。如果需要改变形状的大小或位置,可以使用变换工具。可以在选项栏中调整形状的颜色、填充和描边等属性。0000今天才知道,手机底部的小孔居然这么厉害,看完涨知识了
朋友们大家好,我是小俊,今天小俊给大家分享一下关于手机方面的知识!大家在使用手机的时候啊,是不是都发现了在手机底部有非常多的小孔,那么这些小孔都有什么用途呢?其实啊在我们生活中都能给我们很大帮助,而且有有一个小孔还经常被我们忽略,接下来就一起来学习一下小俊的知识!站长网2023-07-28 14:26:420000Python中的中文文本情感分析:6种方法详解!
中文文本情感分析是一种将自然语言处理技术应用于文本数据的方法,它可以帮助我们了解文本中所表达的情感倾向。在Python中,有多种方法可以进行中文文本情感分析,下面将介绍其中的6种方式。基于情感词典的方法情感词典是一种包含了大量情感词汇的词典,其中每个词都被标记为积极、消极或中性。基于情感词典的方法是将文本中的每个词与情感词典中的词进行匹配,然后根据匹配结果计算文本的情感倾向。0000一文搞定Excel日期类求和,按年/季度/月/周/天,建议收藏!
Excel中如何用函数公式按季度求和?如何按周求和?无论条件如何变化,它的本质就是以日期为条件的求和,我们都可以用一个函数来搞定,那就是SUMIFS!下面,跟着我们一起来看看吧。1.用函数公式按季度求和方法第一种:把求和条件具化为起止日期进行多条件求和站长网2023-07-28 13:11:070000