2015-04-15 50 views
-1

我正在嘗試在Visual Basic 2010 express中編寫一段代碼,它生成4個不同的隨機值,它們合計爲100,並偏向實際值中的一個值數值,我知道我將如何使某個值在價值方面受到青睞,但我不確定所有隨機值合計爲100,某人是否可以提供一些原始碼或sudo碼以供我使用請從?Visual Basic Express 2010中的隨機值合計爲100

+1

請加你迄今所以我們可以工作的代碼那 –

回答

3

的典型方式是:

  • 生成4個隨機值(R1,R2,R3,R4) - 你可以把這些在數組或四個變量。
  • 計算100/(r1+r2+r3+r4)
  • 乘以這個數每個4個值

如果需要整數,有一個機會,四捨五入會導致您的數字加起來的東西不正是100在這種情況下, ,選擇1..4之間的另一個隨機整數,稱這個n,然後從r(n)中加上或減去,這樣總數加起來就是100.

+0

我不太明白,所以我會首先聲明一個4個整數的數組?然後將它們除以100?這將給我留下4個隨機值,這些值已被縮小。我不太明白這對我有什麼幫助,你是否希望我能更多地解釋這種情況? –

+0

你需要整數嗎?這使得它更難一點 - 你必須舍入數值,這可能會使你失去100.使用第五個隨機值來決定,你適應哪個值r1..r4準確地命中100 –

2

生成3個從0到你的極限的隨機數(100) ,但每次生成隨機數字時都會將其從您的限制中減去。第4號將是限制的剩餘價值,這4個數字加起來也就100

Module Module1 
    Sub Main() 
     Dim limit As Integer = 100 
     Dim rand As New Random 

     ' Generate three random numbers 
     For i As Integer = 1 To 3 
      Dim newNumber = rand.Next(0, limit) 

      ' Set your new limit by subtracting the random number 
      limit = limit - newNumber 
      Console.WriteLine(newNumber) 
     Next 
     ' The 4th number will be whatever is left in limit 
     Console.WriteLine(limit) 
     Console.ReadLine() 
    End Sub 
End Module 

結果:

enter image description here

+0

如果第一個隨機數生成的數字是99? –

+0

它仍然會工作...你最終會有一個新的限制1,這意味着rand.Next將看起來像「rand.Next(0,1)」。 maxValue是獨佔的,因此會生成0。這將導致以下結果:99,0,0,1. – Shar1er80

+0

我知道你的方法有效,但我想知道0或更低的數字會出現不成比例的次數嗎?我的意思是它似乎「不那麼隨意」。 –