2015-04-15 51 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或更低的数字会出现不成比例的次数吗?我的意思是它似乎“不那么随意”。 –