求教 vba数组穷举

[复制链接]
查看11 | 回复10 | 2021-1-27 05:16:41 | 显示全部楼层 |阅读模式
Subtext()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger
Dimarr()
arr()=Range("a1:a48")
Fori=1To48
Forj=1To48
Fork=1To48
Forl=1To48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664.04Then
Range("d3")=arr(i,1)
Range("e3")=arr(j,1)
Range("f3")=arr(k,1)
Range("g3")=arr(l,1)
EndIf
Next
Next
Next
Next
EndSub
想暴力穷举四个数的和,为什么有时候可以求出来有时候又不可以求出来?小白求教,谢谢各位大神
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
Subdemo()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger
Dimarr()
arr()=Range("a1:a48").Value
Fori=1To48-3
Forj=iTo48-2
Fork=jTo48-1
Forl=kTo48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664.04Then
Range("d3")=arr(i,1)
Range("e3")=arr(j,1)
Range("f3")=arr(k,1)
Range("g3")=arr(l,1)
EndIf
Nextl
Nextk
Nextj
Nexti
EndSub
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
Subdemo()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger,indexAsInteger
index=1
Dimarr()
arr()=Range("a1:a48").Value
Fori=1To48-3
Forj=iTo48-2
Fork=jTo48-1
Forl=kTo48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664Then
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
EndIf
Nextl
Nextk
Nextj
Nexti
EndSub

回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
引用1楼humanmagic的回复:Subdemo()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger
Dimarr()
arr()=Range("a1:a48").Value
Fori=1To48-3
Forj=iTo48-2
Fork=jTo48-1
Forl=kTo48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664.04Then
Range("d3")=arr(i,1)
Range("e3")=arr(j,1)
Range("f3")=arr(k,1)
Range("g3")=arr(l,1)
EndIf
Nextl
Nextk
Nextj
Nexti
EndSub

能解释一下为啥这样吗


回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
Subdemo()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger,arr
DimindexAsInteger
index=1'结果计数器
arr()=Range("a1:a48").Value
Fori=1To48-3'总共48个数,4个数穷举,所以要-3
'j=i+1是为了防止重复选择,比如i选了第一个数,那么j肯定不能选第一个数
Forj=i+1To48-2
'同上
Fork=j+1To48-1
'同上
Forl=k+1To48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664.04Then
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'计数器+位置增加
EndIf
Nextl
Nextk
Nextj
Nexti
EndSub
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
引用4楼humanmagic的回复:Subdemo()
DimiAsInteger,jAsInteger,kAsInteger,lAsInteger,arr
DimindexAsInteger
index=1'结果计数器
arr()=Range("a1:a48").Value
Fori=1To48-3'总共48个数,4个数穷举,所以要-3
'j=i+1是为了防止重复选择,比如i选了第一个数,那么j肯定不能选第一个数
Forj=i+1To48-2
'同上
Fork=j+1To48-1
'同上
Forl=k+1To48
Ifarr(i,1)+arr(j,1)+arr(k,1)+arr(l,1)=664.04Then
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'计数器+位置增加
EndIf
Nextl
Nextk
Nextj
Nexti
EndSub

穷举不能重复?如果我4个数字都是重复的呢?就算不出来了嘛?
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
重复的意思是四个数都选一个数
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
引用6楼humanmagic的回复:重复的意思是四个数都选一个数
我知道,我的意思是我四个数都一样那不是求不出来了?
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
引用6楼humanmagic的回复:重复的意思是四个数都选一个数
老哥,我改成你这个代码,有些还是求不出来
回复

使用道具 举报

千问 | 2021-1-27 05:16:41 | 显示全部楼层
代码本身没有问题,就是48*48*48*48有点大,所以算得慢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行