Give an array and a certain number,how to select some of the elements to sums upto the number?
The following codes can bring you one or more solutions out:
-
SubSolve(ByValTotalAsDouble,ByRefData,OptionalByValfirstsolutionAsBoolean=True)
-
DimFitAsBoolean,CountAsLong,Result()AsString,Used()AsByte,nAsLong,TempAsDouble
-
n=UBound(Data)
-
ReDimUsed(n)
-
Do
-
Fit=False
-
Do
-
Fori=0Ton
-
Used(i)=1-Used(i)
-
IfUsed(i)=1ThenExitFor
-
Next
-
Ifi>nThenExitDo
- Temp=0
-
Fori=0Ton
-
IfUsed(i)=1ThenTemp=Temp+Data(i)
-
Next
-
IfAbs(Temp-Total)<0.01Then
-
Fit=True
-
ExitDo
-
EndIf
-
Loop
-
IfFitThen
-
Count=Count+1
-
ReDimPreserveResult(1ToCount)
-
Fori=0Ton
-
IfUsed(i)=1ThenResult(Count)=Result(Count)&"+"&Data(i)
-
Next
-
Result(Count)="Solution"&Count&":"&Total&"="&Mid(Result(Count),2)
-
Debug.PrintResult(Count)
-
Iffirstsolution=TrueThenMsgBox"1solutionhasbeenfound!!!":ExitSub
-
EndIf
-
LoopWhileFit
-
MsgBoxIIf(Count>1,Count&"solutionshave",IIf(Count=0,"No",1)&"solutionhas")&"beenfound!!!"
-
EndSub
-
SubGetit()
- Solve1839.31,Array(466.89,480.49,281.06,13.61,70.59,174.86,313.82,374.66,281.5,48.95,262.86,300.33,248.56,184.4,442.91,378.47,196.49,150.7,162.87,307.73,64.97,132.79,480.06,361.54,240.13)
-
EndSub
It returns:
Solution1: 1839.31=13.61+70.59+174.86+313.82+248.56+442.91+378.47+196.49
If we change the codes as the following:
-
SubGetit()
-
Solve1839.31,Array(466.89,480.49,281.06,13.61,70.59,174.86,313.82,374.66,281.5,48.95,262.86,300.33,248.56,184.4,442.91,378.47,196.49,150.7,162.87,307.73,64.97,132.79,480.06,361.54,240.13),False
-
EndSub
We'll get 29 solutions as the following:
Solution1: 1839.31=13.61+70.59+174.86+313.82+248.56+442.91+378.47+196.49
Solution2: 1839.31=466.89+281.06+13.61+70.59+281.5+378.47+196.49+150.7
Solution3: 1839.31=480.49+13.61+70.59+174.86+262.86+378.47+150.7+307.73
Solution4: 1839.31=281.06+13.61+70.59+174.86+313.82+281.5+48.95+196.49+150.7+307.73
Solution5: 1839.31=466.89+480.49+48.95+184.4+442.91+150.7+64.97
Solution6: 1839.31=480.49+13.61+174.86+313.82+281.5+196.49+150.7+162.87+64.97
Solution7: 1839.31=13.61+374.66+300.33+184.4+442.91+150.7+307.73+64.97
Solution8: 1839.31=13.61+313.82+48.95+300.33+248.56+378.47+162.87+307.73+64.97
Solution9: 1839.31=480.49+70.59+281.5+48.95+262.86+248.56+150.7+162.87+132.79
Solution10: 1839.31=281.06+13.61+70.59+281.5+300.33+184.4+196.49+150.7+162.87+64.97+132.79
Solution11: 1839.31=281.06+262.86+248.56+378.47+162.87+307.73+64.97+132.79
Solution12: 1839.31=466.89+70.59+174.86+48.95+262.86+184.4+150.7+480.06
Solution13: 1839.31=281.06+13.61+70.59+281.5+300.33+196.49+150.7+64.97+480.06
Solution14: 1839.31=281.06+13.61+174.86+262.86+300.33+248.56+196.49+361.54
Solution15: 1839.31=281.06+13.61+174.86+313.82+248.56+184.4+196.49+64.97+361.54
Solution16: 1839.31=70.59+174.86+281.5+48.95+378.47+150.7+307.73+64.97+361.54
Solution17: 1839.31=13.61+70.59+442.91+162.87+307.73+480.06+361.54
Solution18: 1839.31=70.59+48.95+300.33+248.56+196.49+132.79+480.06+361.54
Solution19: 1839.31=466.89+281.06+70.59+174.86+442.91+162.87+240.13
Solution20: 1839.31=374.66+281.5+248.56+184.4+196.49+150.7+162.87+240.13
Solution21: 1839.31=281.06+13.61+174.86+374.66+262.86+184.4+307.73+240.13
Solution22: 1839.31=466.89+70.59+174.86+48.95+262.86+196.49+150.7+162.87+64.97+240.13
Solution23: 1839.31=281.06+374.66+281.5+378.47+150.7+132.79+240.13
Solution24: 1839.31=70.59+374.66+48.95+184.4+307.73+132.79+480.06+240.13
Solution25: 1839.31=281.06+13.61+174.86+48.95+248.56+162.87+307.73+361.54+240.13
Solution26: 1839.31=480.49+13.61+70.59+174.86+300.33+64.97+132.79+361.54+240.13
Solution27: 1839.31=13.61+281.5+48.95+262.86+248.56+184.4+64.97+132.79+361.54+240.13
Solution28: 1839.31=313.82+262.86+300.33+162.87+64.97+132.79+361.54+240.13
Solution29: 1839.31=281.06+70.59+374.66+150.7+162.87+64.97+132.79+361.54+240.13
分享到:
相关推荐
SUMS30 Mathematics for Finance -- An Introduction to Financial Engineering, Marek Capiński, Tomasz Zastawniak (2003).pdf
SUMS62 An Introduction to Laplace Transforms and Fourier Series, Phil Dyke (2014).zip
SUMS26 Matrix Groups -- An Introduction to Lie Group Theory, Andrew Baker (2002) .djvu
SUMS26 Matrix Groups -- An Introduction to Lie Group Theory, Andrew Baker (2002) .zip
SUMS08 Elementary Number Theory, Gareth A. Jones, J. Mary Jones (1998).zip
By swivelling the mirrors, light from any subset of pixels can be focused on a single photodetector, which thereby sums up the luminosity of the entire subset. The mirror array has an effective ...
Given a specified total t and a list of n integers, find all distinct sums using numbers from the list that add up to t. For example, if t=4, n=6, and the list is [4,3,2,2,1,1], then there are four ...
SUMS79 From Natural Numbers to Quaternions, Dr. Jürg Kramer, Anna-Maria von Pippich(2017).zip
SUMS65 Algebraic Number Theory, Frazer Jarvis (2014).zip
SUMS48 Introduction to Analytical Dynamics, Revised Edition, Nicholas Woodhouse (2009).zip
The cows in farmer John's herd are ...Write a program that will compute the number of ways farmer John can sum the numbers on consecutive cows to equal N. Do not use precomputation to solve this problem.
SUMS19 An Introduction to Laplace Transforms and Fourier Series, Philip P. G. Dyke (2001).zip
SUMS47 Codes -- An Introduction to Information Communication and Cryptography, N.L. Biggs (2008).zip
SUMS82 A History of Abstract Algebra -- From Algebraic Equations to Modern Algebra, Jeremy Gray (2018).zip
一种可编程实现的Ramanujan和计算方法,郭旭静,周丽娜,广泛应用在数学领域的Ramanujan和正在信号处理领域和通信领域获得越来越多的关注。使用传统的数学公式进行Ramanujan和的计算方式因涉及
elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type structure of these records. Allows to connect to the internal array of ...
SUMS55 An Introduction to Enumeration, Alan Camina, Barry Lewis (2011) .zip
elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type structure of these records. Allows to connect to the internal array of ...
elements-branches and itself be an element to other parental record. Component TDBGridEh supports to show the tree-type structure of these records. Allows to connect to the internal array of ...