數值范圍a,b,在a與b之間設定一個數值c,設定數值個數x,求生成x個亂數的數值
分數不多,希望大家能提供下思路
uj5u.com熱心網友回復:
你的意思是不是生成x個a到b之間的亂數?uj5u.com熱心網友回復:
經過思考,可以轉換模型,即已知數值范圍[a,b],設定有x個數,數值總和為Sum。前提條件是Sum的范圍應是[a*x,b*x]
那么首先判斷取第一數值時,x1的數值范圍是多少?
假定x-1個數值都為a,則x1的取值上限為Sum-a*(x-1),又已限定上限為b,則Max(x1)=Min(b,Sum-a*(x-1))
同理,假定x-1個數值都為b,則x1的取值下限為Sum-b*(x-1),又已限定上限為b,則Min(x1)=Max(a,Sum-b*(x-1))
即x1在[Max(a,Sum-b*(x-1)),Min(b,Sum-a*(x-1))]范圍內取值。則選取x2時,Sum1=Sum-x1,
那么在選取第i個數值時,還余下(x-i)個待選數值,Sum(i)=Sum-(x1+x2+…+x(i-1)),x(i)的取值范圍應為[Max(a,Sum(i)-b*(x-i)),Min(b,Sum(i)-a*(x-i))]。接下來就可以用回圈陳述句給x(i)賦值,代碼如下:
Private Sub XArr(a as Double ,b as Double, Sum as Double,N as Interge)
Dim X( ) as Double
Redim X( 1 to N)
for i = 1 to N
X(i)=RndBT(Max(a,Sum(i)-b*(N-i)),Min(b,Sum(i)-a*(N-i)),Index) 'RndBT是自定義函式,求兩個數值間的亂數
Sum=Sum-X(i)
Next
End Sub
純手打,有錯誤的地方請諒解
如果大家有更好的思路或者代碼我還是會給分的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/196181.html
標籤:VB基礎類
