1. 首页 > 星座知识 > 文章页面

VB算法问题,一个堆数字中凑出指定数字(在一堆数字中选几个数字求和等于固定)

一个VB算法的问题

今天给各位分享VB算法问题,一个堆数字中凑出指定数字的知识,其中也会对12个连续数字猜测算法进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

...63,8,3下一个数字是多少PS:请说下算法。。VB算法问题,一个堆数字中凑出指定数字...63,8,3下一个数字是多少PS:请说下算法。。

65536,256,16下一个数字是4

一个vb问题 如图,要让数据像图1.4.37中所示那样排列整齐,我的代码哪里错了呢 为什么空格还是

因为65536是256的平方 256是16的平方由此可得出前一个数是后一个数的平方,16是4的平方所以下一个数字是4

3968,63,8,3下一个数字是2

因为63的平方3969减去1是3968,8的平方64减去1是63,3的平方9减去1是8,所以(2)的平方4减去1是3,即答案为2;

VB算法问题,一个堆数字中凑出指定数字

这是个求子集合加总问题(subset sum problem)。是算法理论中比较有名的NP问题。

有几种经典解法:

1.组合论。有所有集合元素的组合,然后求和与和目标比较。方法简单,但算法复杂度高,当集合数较大,比如≥ 15后,速度明显慢;

2.动态规划。递归求解,属于典型的divide and conquer方案。

3.回溯法(backtracking),子集合属于这个里面的一个特例。--虽然也要递归,但相较上面的方法,在集合比较大的时候,也能保持不错的效率。

下面给出回溯法的vb代码(vb 2010)。

PrivateSuboutput(ByRefta()AsInteger,ByValta_sizeAsInteger)

Dimra(ta_size-1)AsInteger'differfromc/c++

Array.Copy(ta,ra,ta_size)

Dimconverter=NewConverter(OfInteger,String)(Function(num)num.ToString)

Dimstr=String.Join("+",Array.ConvertAll(ra,converter))

lbSubset.Items.Add(str)

EndSub

PrivateSubgetSubsetSum(ByRefsa()AsInteger,ByRefta()AsInteger,

ByValsa_sizeAsInteger,ByValta_sizeAsInteger,

ByValsumAsInteger,ByValcnt_nodeAsInteger,ByValtargetAsInteger)

DimiAsInteger

Iftarget=sumThen

output(ta,ta_size)

Ifcnt_node+1<sa_sizeAndsum-sa(cnt_node)+sa(cnt_node+1)<=targetThen

getSubsetSum(sa,ta,sa_size,ta_size-1,sum-sa(cnt_node),cnt_node+1,target)

EndIf

Return

Else

Ifcnt_node<sa_sizeAndsum+sa(cnt_node)<=targetThen

Fori=cnt_nodeTosa_size-1'differfromc/c++

ta(ta_size)=sa(i)

Ifsum+sa(i)<=targetThen

getSubsetSum(sa,ta,sa_size,ta_size+1,sum+sa(i),i+1,target)

EndIf

Nexti

EndIf

EndIf

EndSub

PrivateSubgenerateSubsets(ByRefsa()AsInteger,ByValsizeAsInteger,ByValtargetAsInteger)

Dimta(size-1)AsInteger

DimtotalAsInteger=0

Array.Sort(sa)

total=sa.Sum

If(sa(0)<=target)And(total>=target)Then

getSubsetSum(sa,ta,size,0,0,0,target)

EndIf

EndSub

PrivateSubbtnStart_Click(senderAsSystem.Object,eAsSystem.EventArgs)HandlesbtnStart.Click

DimsizeAsInteger=15

DimtargetAsInteger=10

Dimdata()AsInteger

DimiAsInteger

lbSubset.Items.Clear()

ReDimdata(size-1)'differfromc/c++

Fori=LBound(data)ToUBound(data)

data(i)=i+1

Nexti

generateSubsets(data,size,target)

EndSub

关于VB算法问题,一个堆数字中凑出指定数字的内容到此结束,希望对大家有所帮助。

2009年春江苏计算机等考vb上机问题 急

联系我们

Q Q:

微信号:

工作日:9:30-18:30,节假日休息

微信