|
Sub find_combination()
Dim arr() As Variant
Dim i As Long, j As Integer, k As Integer
Dim sum As Double, closest_sum As Double
closest_sum = 0
ReDim arr(1 To 18)
For i = 1 To 18
arr(i) = Cells(i, 1).Value
Next i
For i = 1 To 2 ^ 18 - 1
sum = 0
For j = 0 To 17
If i And 2 ^ j Then
sum = sum + arr(j + 1)
End If
Next j
If sum >= 4000 And (closest_sum = 0 Or Abs(sum - 4000) < Abs(closest_sum - 4000)) Then
closest_sum = sum
For k = 1 To 18
If i And 2 ^ (k - 1) Then
Cells(k, 2).Value = arr(k)
Else
Cells(k, 2).Value = ""
End If
Next k
End If
Next i
End Sub
上面是GPT给的一段代码,主要是用来统计哪些数据相加最接近4000。
这个位置的代码逻辑看不懂,请老师帮解答下
If i And 2 ^ j Then
当i=1 2 ^ j=1的时候 会执行
当i=1 2 ^ j=其他,不执行
当i=2 2 ^ j=2,执行
当i=2 2 ^ j=其他,不执行
当i=3 2 ^ j=1的时候,执行
当i=3 2 ^ j=2的时候,执行
当i=4 2 ^ j=4的时候,执行
问下这个if a and b 是怎么判断的
|
|