模拟两个骰子滚动并在矢量中保存总和

时间:2016-11-27 20:44:39

标签: c++

我正在尝试使这个代码滚动两个骰子并跟踪向量中的总和。我提出了以下代码,但如果输入12以上的数字,我会继续得到范围错误。有人可以告诉我我做错了吗?

#include "std_lib_facilities.h"

void simulate(vector<int>&, size_t);
void size_int(const vector<int>, size_t);
void print_vector(const vector<int>&, size_t);

int main()
{
    size_t n;
    cout << "Enter the amount of rolls: ";
    cin >> n;
    vector<int> v(12);
    for(int i=0;i<v.size();i++)
    {
        v[i] = 0;
    }  
    simulate(v, n);
    print_vector(v, n);
}

void simulate(vector<int>& sum, size_t n)
{
    int dice_1, dice_2;
    cout << "Rolling the dice " << n << " times produces:\n";
    srand( time(NULL) ); 
    size_t i;

for ( i = 0; i < n; ++i){
    dice_1 = 1+(rand() % 6); 
    dice_2 = 1+(rand() % 6);

    sum[dice_1+dice_2]++;
    }
}

void print_vector(const vector<int>& v, size_t n)
{
    size_t i;
    double x = 1.0*n;
    cout << "Roll\tFrequency\tProbablity\n";
    for(i = 1;i<v.size();++i)
    {
        cout << i+1 << "\t" << v[i] << "\t\t" << v[i]/x << endl;
    }
}

2 个答案:

答案 0 :(得分:0)

sum[dice_1+dice_2]++;

dice1+dice2将是介于2和12之间的值。 sum仅包含0到11的元素。您需要将sum调整为 13 才能执行此操作。

答案 1 :(得分:0)

因为你的向量从0开始 你应该将值存储到

sum[dice_1+dice_2-1]++;

打印时。

开始
for(i=0....)