0
votes

Comment générer des nombres aléatoires entre 1 et 60

Comment puis-je faire cela? Je sais comment générer des nombres aléatoires mais pas dans une plage fixe.


3 commentaires

Voir ce message Stackoverflow.com/Questtions/22380890/...


Si vous voulez la plage, il sera rand.nextint (math.abs (x-y)) + math.min (x, y)


Si vous avez une nouvelle question, vous devez la poser comme une question distincte au lieu de la modifier. Pour cette question spécifique, cela serait également un duplicata, cependant - voir Stackoverflow.com/Questtions/363681/... . Ou si vous avez besoin de double au lieu d'entiers, voir Stackoverflow.com/Questtions/3680637/...


4 Réponses :


1
votes

Voici une solution possible:

Nous pouvons d'abord appeler notre méthode qui nous procurera notre valeur de somme.

Nous obtenons un nombre aléatoire entre 0 et la somme que nous avons calculée qui donnera à notre premier numéro.

Soustrayez notre premier numéro de la somme Obtenir un autre aléatoire pour la deuxième et la valeur finale sera à nouveau la 2e de la somme. xxx


1 commentaires

Le constructeur par défaut aléatoire () est meilleur que vous pour fournir une graine, alors laissez-le le faire pour vous et simplement écrire rand rand = nouveau aléatoire (); .



0
votes

Je suppose que vous voulez générer une combinaison aléatoire de n entiers tels que -

  • Chaque entier est 0 ou plus,
  • Les entiers ont une somme qui réside dans l'intervalle [ MINSUM , maxsum ],
  • Les entiers apparaissent dans un ordre aléatoire et
  • La combinaison est choisie uniformément au hasard parmi toutes les combinaisons répondant aux autres exigences.

    Ceci peut être décrit comme -

    1. Choisir une somme aléatoire (selon le nombre de combinaisons possibles pour cette somme), puis
    2. Choisir une combinaison aléatoire pour cette somme.

      La partie 2 est triviale grâce à l'algorithme Smith and Tromble, et je donne du code rubis pour cet algorithme dans un question pour un problème connexe .

      La partie 1 est la partie délicate. Cela implique -

      • comptant le nombre de combinaisons valides pour chaque somme dans [ MINSUM , maxum ] (plus formellement, le nombre de partitions de chaque somme en n parties, où chaque partie peut être vide et survenir plus d'une fois), puis
      • Choisir une somme aléatoire avec probabilité proportionnelle au nombre de combinaisons valides (partitions) pour cette somme.

        Ce n'est que un croquis du problème, car je ne connais pas la formule exacte qui répond aux trois premières exigences énoncées ci-dessus dans cette réponse. Tout ce que je sais, c'est que le nombre de partitions de N dans les parties K non vides est égal au nombre sterling du deuxième type (mais je ne connais pas une formule similaire pour le cas où les pièces peuvent être vides ou que les pièces peuvent survenir plus d'une fois).


0 commentaires

2
votes

Pourquoi ne faites-vous pas simplement au hasard la somme. Générez ensuite n nombres aléatoires avec cette somme xxx

référence: générer n nombres aléatoires dont la somme est m et que tous les nombres doivent être supérieurs à zéro


0 commentaires

0
votes

Ceci est probablement votre meilleur choix pour une solution générique:

int[] randomNumbersWithSumBetween(int num, int min, int max, Random random) {
  if (min > max) throw new IllegalArgumentException("min > max");
  if (num < 1) throw new IllegalArgumentException("No random numbers to generate");
  int[] result = new int[num];
  result[0] = min + random.nextInt(max - min);
  for (; num-- > 1; ) {
    result[num] = random.nextInt(result[0]);
    result[0] -= result[num];
  }
  return result;
}


0 commentaires