2013-07-19 4 views
-3

Я пытаюсь выяснить, как сделать приложение для катания на кости, процентным шансом для каждого результата. Например, на одной шестисторонней кости будет отображаться: 1 = 16,6% 2 = 16,6% 3 = 16,6% 4 = 16,6% 5 = 16,6% 6 = 16,6%.Вероятность кости

Пользователь вводит тип кости (количество сторон n) и количество играемых костей (d).

У кого-нибудь есть формула, которая будет работать на C++? Я просто не могу разобраться в этом/понять, что мне удалось найти до сих пор.

Благодаря

EDIT Я хотел бы сохранить результаты в массиве своего рода, а также, если это возможно

+0

вы хотите, чтобы каждый умереть, чтобы быть в состоянии иметь различное количество сторон? – Daniel

+0

Да каждый кубик может быть 4, 6, 8, 10 или 20 сторон – tim

+1

http://en.wikipedia.org/wiki/Dice#Probability – IdeaHat

ответ

1
void dice_analysis(int dice_sides, int dice_number, float * h2, int precision) 
{ 
    int temp=0; 
    int histogram[dice_sides*dice_number]; 
    //init histogram 
    for(int k=0;k<dice_sides*dice_number;k++) 
    { 
      histogram[k]=0; 
    } 
    //statistical analysis 
    for(int i=0;i<precision;i++) 
    { 
      temp=0; 
      for(int j=0;j<dice_number;j++) 
      { 

       temp+=(rand()%dice_sides +1); 
      } 
      for(int k=0;k<dice_sides*dice_number;k++) 
      { 
       if(temp==(k+1)){histogram[k]++;} 
       //actually histogram[temp]++; look better 
      } 


    } 
    //printing the calculated results 
    for(int k=0;k<dice_sides*dice_number;k++) 
    { 
       cout<<k+1<<":"<<(float)histogram[k]/(precision/100.0f)<<"%"<<endl; 
       h2[k]=histogram[k]/(precision/100.0f); 
    } 


} 

Выходной для кубиков (8,2, x, 1000) ---> две 8-сторонние кубики

1:0% 
2:1.5% 
3:4.4% 
4:3.8% 
5:5.7% 
6:8.8% 
7:9.1% 
8:10.2% 
9:14% 
10:10.2% 
11:8.3% 
12:7.5% 
13:6.8% 
14:6% 
15:2.8% 
16:0.9% 

Вы можете видеть, что «1» невозможно для двух или более кубиков. Кроме того, «9» наиболее вероятно, будучи шансом% 14.

Вы можете использовать как: dice_analysis(8,2,output_array,1000);

+0

это кажется идеальным, кроме того, когда я пытаюсь использовать 1 6-сторонний кубик. все ответы немного отличаются, когда, конечно, все должно быть 16,7%? – tim

+0

Если вам нужна точность, увеличьте от 1000 до 100000 и разделите гистограммы на 1000 вместо 1000. Я добавил версию с массивом. –

+0

Добавлена ​​настраиваемая прецизионная версия. –

0
std::vector<double> probas; 
for(i = 1; i <= num_faces; ++i) 
{ 
    std::cout << i << " = " << 100.0/num_faces << "%" << std::endl; 
    probas.push_back(100.0/num_faces); 
} 

Edit для векторного материала

+1

однако я не принимал во внимание, что у ваших игроков есть 70% увеличенный шанс критического удара против последнего босса –

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