给出一个值,通过动作运算选出选中单元格内哪些数字相加为这个值。

动作需求 · 1006 次浏览
谁扔的炮仗 创建于 2024-01-19 16:25

大家好,我的需求是首先在表格内选中一个区域,区域内每个单元格各有一个数字。首先输入一个数值,然后由程序算出选中区域内哪些数字相加为这个值并给出相关提示标记。我在动作库看了一圈没有相关的动作,麻烦大家给点建议。谢谢。

输入值5706.5,提示此三项求和为5706.5。


回复内容
CL 2024-01-19 16:32
#1

什么场景会有这样的需求? 介绍一下背景信息...

谁扔的炮仗 回复 CL 2024-01-19 16:35 :
电商认款,多笔订单合并打款,有时候几十单合并一起打款不做标记,就需要这种办法把对应的金额挑出来,人工挑数量大实在挑不出来。。。
CL 回复 谁扔的炮仗 2024-01-19 16:55 :

排列组合可能性太多了。 

这种情况目前是怎么解决? 

谁扔的炮仗 回复 CL 2024-01-19 16:58 :

就是先扔着 把其他能挑的挑出来 剩下的慢慢找 凭感觉 通过尾数或者小数点后面的数对照着找

CL 回复 谁扔的炮仗 2024-01-19 17:00 :

不能直接联系他们补个清单嘛

谁扔的炮仗 回复 CL 2024-01-19 17:01 :

沟通过 很麻烦 涉及到的人员和地方太多了 一言难尽呀

CL 回复 谁扔的炮仗 2024-01-19 17:22 :

感觉即使匹配到了,也可能是错的,比如有1+4 和 5 ,得到的结果是一样,但是可能并不是最初实际对应的订单。

感觉这涉及到算法范畴了

个人建议提取数据然后丢给AI查找然后再回来标记

可以可以 也是个办法

运营:秋风 2024-01-20 11:21
#3

这个动作其实没有那么复杂.
首先确定,

用1个项进行计算.找到等于=5706.5
用2个项,全部进行加计算,找到=5706.5 的项

用3个项,全部都相互计算,找到得出=5706.5的

用4个项,全部相互+计算,找到等于5706.5的

以此类推,图中有8项.做八次项,这种基本上包含了所有的组合加的结果.
人做不了,机器做的了,机器计算能力超强,超快.

运营:秋风 最后更新于 2024-01-20 11:22
薄酒不堪饮 2024-01-20 23:27
#4

https://getquicker.net/Sharedaction?code=158bbb69-c590-4af9-ce0b-08d99cd13b42

谁扔的炮仗 回复 薄酒不堪饮 2024-01-22 09:51 :

我靠牛批,和我想的一模一样,但是如果一组数内有多个组合求和等于目标值,是否可以用不同的颜色标记出来呢,类似这样。

谁扔的炮仗 最后更新于 2024-01-22 09:51
湘喑 回复 谁扔的炮仗 2024-01-22 12:38 :

这个要复杂一些,还有个问题,如果有一个值在多个解中,就意味着要标记多重颜色了,这个怎么解决

谁扔的炮仗 回复 沉没的白鲸 2024-01-26 09:01 :

完美完美,太尿性了兄弟,赞!

epodak 2024-02-06 21:59
#6

你提到的问题涉及到在一个给定的数字集合中找到所有可能的数字组合,这些数字组合的和等于一个特定的目标数值。

这个问题接近于“子集求和问题”(Subset Sum Problem),它是一个著名的计算机科学问题,属于NP完全问题。简单地说,给定一个集合和一个目标数值,任务是找出是否有集合的一个子集,其元素相加的和等于目标数值。

对于你的具体需求,我们可以采用回溯算法或动态规划来解决这个问题。回溯算法通过尝试每个可能的数字组合来找到所有满足条件的解,而动态规划则是通过构建一个表格来避免重复计算,从而提高效率。

解决方案概述:

1. 回溯算法:

  • 思路:从选中区域的数字集合开始,尝试所有可能的组合,累加当前选择的数字,当累加和等于目标值时,记录当前组合。
  • 优点:能够找到所有可能的解。
  • 缺点:对于大集合,计算量可能非常大。

伪代码示例:

def find_combinations(numbers, target, start=0, path=[], result=[]):
    if target == 0:
        result.append(path)
        return
    for i in range(start, len(numbers)):
        if numbers[i] > target:
            continue
        find_combinations(numbers, target - numbers[i], i + 1, path + [numbers[i]], result)
    return result

numbers = [1, 2, 3, 4, 5]  # 示例数字集合
target = 6  # 目标和
combinations = []
find_combinations(numbers, target, 0, [], combinations)
print(combinations)

2. 动态规划:

  • 思路:使用动态规划来解决子集求和问题,通过构建一个二维数组dp,其中dp[i][j]表示从数组的前i个数字中选取若干个数字,是否能组成和为j的子集。
  • 优点:更高效,特别是在处理大数据集时。
  • 缺点:不会具体给出哪些数字组成了目标和,只能告诉你是否存在这样的组合。

伪代码示例:

def is_subset_sum(numbers, target):
    n = len(numbers)
    dp = [[False for x in range(target + 1)] for y in range(n + 1)]
    
    for i in range(n + 1):
        dp[i][0] = True
    
    for i in range(1, n + 1):
        for j in range(1, target + 1):
            if j < numbers[i - 1]:
                dp[i][j] = dp[i - 1][j]
            else:
                dp[i][j] = dp[i - 1][j] or dp[i - 1][j - numbers[i - 1]]
    
    return dp[n][target]

numbers = [1, 2, 3, 4, 5]  # 示例数字集合
target = 6  # 目标和
print(is_subset_sum(numbers, target))
回复主贴