level 1
比如一组可重复使用160 240 480 800 1280 1600 3680的数字 通过加减运算得到一个我想要的固定数840?怎么设置公式或者规划求解 感谢!
2021年07月01日 10点07分
1
level 10
我的只能想到7次For循环,强行算出所有结果,看是否有等于的
2021年07月02日 07点07分
2
level 11
'数据全部使用,840无解改成880有解
'如果组合个数不限可以先调佣一个全组合函数组合一下,会有2^cnt-1组的,然后再用二进制取2态进行计算
Option Explicit
Const RESULT = 880
Sub 加减凑数()
Dim i, j, a, n, p, sum, s
a = Array(160, 240, 480, 800, 1280, 1600, 3680)
ReDim t(UBound(a)) As Long
For i = 0 To 2 ^ (UBound(a) + 1) - 1
sum = 0: n = i: p = UBound(t)
Do While n > 0
t(p) = n Mod 2: n = n \ 2: p = p - 1
Loop
For j = 0 To UBound(a)
sum = sum + (-1) ^ (t(j) + 1) * a(j)
Next
If sum = RESULT Then
For j = 0 To UBound(t)
s = s & IIf(t(j) = 0, "-", "+") & a(j)
Next
Debug.Print s & "=" & sum
s = vbNullString
End If
Next
End Sub
2021年07月04日 11点07分
6