Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim arr()
arr() = Range("a1:a48")
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 664.04 Then
Range("d3") = arr(i, 1)
Range("e3") = arr(j, 1)
Range("f3") = arr(k, 1)
Range("g3") = arr(l, 1)
End If
Next
Next
Next
Next
End Sub
想暴力窮舉四個數的和,為什么有時候可以求出來有時候又不可以求出來?小白求教,謝謝各位大神
uj5u.com熱心網友回復:
Sub demo()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim arr()
arr() = Range("a1:a48").Value
For i = 1 To 48 - 3
For j = i To 48 - 2
For k = j To 48 - 1
For l = k To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 664.04 Then
Range("d3") = arr(i, 1)
Range("e3") = arr(j, 1)
Range("f3") = arr(k, 1)
Range("g3") = arr(l, 1)
End If
Next l
Next k
Next j
Next i
End Sub
uj5u.com熱心網友回復:
Sub demo()
Dim i As Integer, j As Integer, k As Integer, l As Integer, index As Integer
index = 1
Dim arr()
arr() = Range("a1:a48").Value
For i = 1 To 48 - 3
For j = i To 48 - 2
For k = j To 48 - 1
For l = k To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 664 Then
Range("d" & index) = arr(i, 1)
Range("e" & index) = arr(j, 1)
Range("f" & index) = arr(k, 1)
Range("g" & index) = arr(l, 1)
index = index + 1
End If
Next l
Next k
Next j
Next i
End Sub
uj5u.com熱心網友回復:
能解釋一下為啥這樣嗎
uj5u.com熱心網友回復:
Sub demo()
Dim i As Integer, j As Integer, k As Integer, l As Integer, arr
Dim index As Integer
index = 1 '結果計數器
arr() = Range("a1:a48").Value
For i = 1 To 48 - 3 '總共48個數,4個數窮舉,所以要-3
'j = i + 1是為了防止重復選擇,比如i選了第一個數,那么j肯定不能選第一個數
For j = i + 1 To 48 - 2
'同上
For k = j + 1 To 48 - 1
'同上
For l = k + 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 664.04 Then
Range("d" & index) = arr(i, 1)
Range("e" & index) = arr(j, 1)
Range("f" & index) = arr(k, 1)
Range("g" & index) = arr(l, 1)
index = index + 1 '計數器+位置增加
End If
Next l
Next k
Next j
Next i
End Sub
uj5u.com熱心網友回復:
窮舉不能重復?如果我4個數字都是重復的呢?就算不出來了嘛?
uj5u.com熱心網友回復:
重復的意思是四個數都選一個數
uj5u.com熱心網友回復:
我知道,我的意思是我四個數都一樣那不是求不出來了?
uj5u.com熱心網友回復:
老哥,我改成你這個代碼,有些還是求不出來
uj5u.com熱心網友回復:
代碼本身沒有問題,就是48*48*48*48有點大,所以算得慢
uj5u.com熱心網友回復:
如果只要求出來合適的,是不是就要中斷出來?
uj5u.com熱心網友回復:
不會啊,有時候很快就求出來了
uj5u.com熱心網友回復:
陣列還是挺快的,一般幾秒
uj5u.com熱心網友回復:
我用了一下,運行了30分鐘才全部算完,
uj5u.com熱心網友回復:
代碼本身沒有問題,就是48*48*48*48有點大,所以算得慢
不會啊,有時候很快就求出來了
我用了一下,運行了30分鐘才全部算完,
我的每次0.3秒就完了
uj5u.com熱心網友回復:
Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer
Dim arr()
arr() = Range("a1:a48")
Range("h4") = Format(Time, "HH:MM:SS")
m = 0
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 664.04 Then
Range("d" & m + 3) = arr(i, 1)
Range("e" & m + 3) = arr(j, 1)
Range("f" & m + 3) = arr(k, 1)
Range("g" & m + 3) = arr(l, 1)
m = m + 1
End If
Next
Next
Next
Next
Range("h5") = Format(Time, "HH:MM:SS")
End Sub
Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer
Dim arr() As Variant
Dim time1
arr() = Range("a1:a48").Value
time1 = Time
Range("H4") = "開始時間: " & time1
Application.EnableEvents = False
m = 0
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 1192.02 Then
Range("D" & m + 3) = arr(i, 1)
Range("E" & m + 3) = arr(j, 1)
Range("F" & m + 3) = arr(k, 1)
Range("G" & m + 3) = arr(l, 1)
m = m + 1
End If
Next
Next
Next
Next
Range("H5") = "已經用時: " & Format(Time - time1, "HH:MM:SS")
Application.EnableEvents = True
End Sub
Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer
Dim arr() As Variant
Dim time1
arr() = Range("a1:a48").Value
time1 = Time
Range("H4") = "開始時間: " & time1
Application.EnableEvents = False
m = 0
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 1192.02 Then
Range("D" & m + 3) = arr(i, 1)
Range("E" & m + 3) = arr(j, 1)
Range("F" & m + 3) = arr(k, 1)
Range("G" & m + 3) = arr(l, 1)
m = m + 1
End If
Next
Next
Next
Next
Range("H5") = "已經用時: " & Format(Time - time1, "HH:MM:SS")
Application.EnableEvents = True
End Sub
Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer
Dim arr() As Variant
Dim time1
arr() = Range("a1:a48").Value
time1 = Time
Range("H4") = "開始時間: " & time1
Application.EnableEvents = False
m = 0
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 1192.02 Then
Range("D" & m + 3) = arr(i, 1)
Range("E" & m + 3) = arr(j, 1)
Range("F" & m + 3) = arr(k, 1)
Range("G" & m + 3) = arr(l, 1)
m = m + 1
End If
Next
Next
Next
Next
Range("H5") = "已經用時: " & Format(Time - time1, "HH:MM:SS")
Application.EnableEvents = True
End Sub
Sub text()
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer
Dim arr() As Variant
Dim brr()
Dim time1
arr() = Range("a1:a48").Value
time1 = Time
Range("H4") = "開始時間: " & time1
Application.EnableEvents = False
For i = 1 To 48
'Debug.Print arr(i, 1)
Next i
m = 0
For i = 1 To 48
For j = 1 To 48
For k = 1 To 48
For l = 1 To 48
If arr(i, 1) + arr(j, 1) + arr(k, 1) + arr(l, 1) = 1300 Then
m = m + 1
ReDim Preserve brr(4, m)
brr(1, m) = arr(i, 1): brr(2, m) = arr(j, 1): brr(3, m) = arr(k, 1): brr(4, m) = arr(l, 1)
End If
Next l
Next k
Next j
Next i
Range("H5") = "已經用時: " & Format(Time - time1, "HH:MM:SS")
Application.EnableEvents = True
If m >= 1 Then
For i = 1 To UBound(brr(), 2)
Range("D" & i + 3) = brr(1, i)
Range("E" & i + 3) = brr(2, i)
Range("F" & i + 3) = brr(3, i)
Range("G" & i + 3) = brr(4, i)
Next i
End If