Initialiser un entier suivant des Probabilité

Bonjour,
j'aimerais créer un un entier qui vaut 1, 2, 3, 4, ou 5 avec une probabilité différente pour chaque nombre (genre avoir 1/3 de chance d'avoir 1 et 1/8 d'avoir 4 etc). Quelqu'un sait-il comment faire simplement?
merci
Configuration: Linux Suse
Firefox 3.5.6

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    le meilleur moyen serait de réduire au PPCM tes probabilités(puisqu'il faut 1/1) et ensuite de faire un tirage aléatoire et en fonction du numéro sorti tu vois dans quel intervalle il se situe.
    1. Le cumul de tes probabilités doit être égal à 1.

      Tu le met sur un diviseur commun du style :
      1 : 1/3 = 4/12
      2 : 1/4 = 3/12
      3 : 1/4 = 3/12
      4 : 1/12
      5 : 1/12

      total 12/12

      tu fais un random enter 1 et 12, et apres tu attributs en fonction d'un switch.

      switch(random)
      {
          case 1 :
          case 2 :
          case 3 :
          case 4 :
              return 1;
          case 5 :
          case 6 :
          case 7 :
              return 2;
          case 8 :
          case 9 :
          case 10 :
              return 3;
          case 11 :
              return 4;
          case 12 :
              return 5;
      }


      après faut adapter au langage

      :)
      1. Modérateur
        merci d'avoir illustré mon propos ;-)
      2. ok je vois,
        en C++, pour le switch ça devrait marcher,
        par contre j'ai le droit de faire un code du style??
        switch(random)
        {
            case 1 :
            case 2 :
            case 3 :
            case 4 :
                return 1;break;
            case 5 :
            case 6 :
            case 7 :
                return 2;break;
            case 8 :
            case 9 :
            case 10 :
                return 3;break;
            case 11 :
                return 4;break;
            case 12 :
                return 5;break;
        }
        


        merci en tout cas,
        j'ai juste peur que ça soit un peu lent en traitement pour la machine
    2. Tu peux rajouter un break, mais apres un return c'est inutile, par contre si tu remplace le return par une affectation c'est bon ^^