2015-04-15 2 views
-1

J'essaie d'écrire un morceau de code dans Visual Basic 2010 express qui génère 4 valeurs aléatoires différentes qui totalisent 100 et favorisent l'une des valeurs en termes de réels valeur numérique, je sais comment je vais faire une certaine valeur être favorisée en termes de valeur mais je ne suis pas sûr d'avoir toutes les valeurs aléatoires ajouter jusqu'à 100, quelqu'un pourrait-il fournir un code brut ou sudo pour moi de travailler de s'il vous plaît?Valeurs aléatoires dans Visual Basic Express 2010 totalisant 100

+1

S'il vous plaît ajouter le code que vous avez à ce jour afin que nous puissions travailler que –

Répondre

3

La forme canonique est:

  • Generate 4 valeurs aléatoires (r1, r2, r3, r4) - vous pourriez les mettre en un tableau ou quatre variables.
  • Calculer 100/(r1+r2+r3+r4)
  • Multiplier chacun de vos 4 valeurs par ce nombre

Si vous avez besoin des entiers, il y a une chance que l'arrondi causera vos numéros pour ajouter à quelque chose pas exactement 100. Dans ce cas, , choisissez un autre entier aléatoire entre 1..4, appelez ce n, et ajoutez ou soustrayez de r (n) pour que le total totalise exactement 100.

+0

Je ne comprends pas très bien, donc je vais déclarer un tableau de 4 entiers pour commencer? Puis les diviser par 100? Ce qui me laissera avec 4 valeurs aléatoires qui ont été redimensionnées. Je ne comprends pas très bien comment cela va m'aider, voulez-vous que j'explique un peu plus le scénario? –

+0

Vous avez besoin d'entiers? Cela rend un peu plus difficile - vous devez arrondir les valeurs, ce qui peut vous amener 100. Utilisez une 5e valeur aléatoire dans le décider, laquelle des valeurs r1..r4 vous adapter pour frapper exactement 100 –

2

Générez 3 nombres aléatoires de 0 à votre limite (100) , mais chaque fois que le nombre aléatoire est généré, soustrayez-le de votre limite. Le numéro 4 sera la valeur restante de la limite et ce numéro 4 ajoutera jusqu'à 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 

Résultats:

enter image description here

+0

Que faire si le premier aléatoire le nombre généré est 99? –

+0

Cela fonctionnerait encore ... Vous auriez une nouvelle limite de 1, ce qui signifie que rand.Next ressemblerait à "rand.Next (0, 1)". La valeur maxValue est exclusive, donc 0 serait généré. Cela provoquerait le résultat suivant: 99, 0, 0, 1. – Shar1er80

+0

Je sais que votre méthode fonctionne, mais je me demande si 0 ou les nombres inférieurs apparaîtraient un nombre disproportionné de fois? Je veux dire qu'il semble "moins aléatoire". –