2016-11-10 4 views
1

Я хочу сгенерировать 10 случайных чисел в C++ между 1 и 3 внутри цикла таким образом, что 1 приходит больше всего (скажем, 50% раз), затем 2 (30% раз), а затем 3 (20%). Можно ли это сделать?Генерация случайных чисел с определенной вероятностью

Я сделал следующий код, чтобы получить случайные числа от 1 до 3, но как я могу добавить вероятности?

#include <iostream> 
#include <windows.h> 
#include "time.h" 
int main(int argc, char*argv[]) 
{ 
    srand (time(NULL)); 
    for (int t = 0; t < 10; t++) 
    { 
     int random_x; 

     random_x = rand() % 3+1; 
     std::cout << "\nRandom X = " << random_x << std::endl; 
    } 
    Sleep(50000); 
    return 0; 
} 
+1

Вы можете проверить встроенные дистрибутивы [здесь] (http://en.cppreference.com/w/cpp/numeric/random) – NathanOliver

ответ

-1

Вы можете сделать что-то вроде этого (в псевдокоде)

x=random(0,100) 
if(x<p1){ 
    y=1; 
} else if (x<p2) 
    y=2 
} else{ 
    y=3 
} 

p1 является изменение 1
p2-p1 является изменение в течение 2
и 100-p2 является изменение для 3

 Смежные вопросы

  • Нет связанных вопросов^_^