0

我正在做一些 C++ 练习并尝试编写一个程序来计算 10000 次尝试后掷骰子组合的次数。我使用了一个二维数组来存储每个可能的骰子组合,我执行 10000rand()%6+1并增加它随机分配的内存分配中的值。

这是我的尝试。

cout << "\nDice roll analyser" << endl;

const int first = 6;
const int second = 6;
int nRolls[first][second];
int count = 0;

while (count < 10000){
    nRolls[rand()%6+1][rand()%6+1]+=1;
    count++;
}

for (int i=0;i<first;i++){
    for (int j=0;j<second;j++){
        cout << nRolls[i][j] << " ";
    }
}

这是我得到的输出;

0 0 0 0 0 0 0 269 303 265 270 264 228 289 272 294 290 269 262 294 303 277 265 294 288 266 313 274 301 245 317 276 2902 284 264

我想要实现的是每个组合的滚动次数,例如滚动 1、6 的次数等。

4

3 回答 3

6

你永远不会更新你的count.

对于您想要运行代码段 n 次的事情,现在 n = 10000,这是您想要执行的一般方式。

for (int i = 0; i < 10000; ++i)
{
    //loop code.
}

此外,myVariable+=1总是可以简化为++myVariableor myVariable++(如果您在分配时没有使用 myVariable 的值,最好使用第一个。有关前/后增量的更多信息可以在这里找到:http: //gd.tuwien.ac.at/languages/c/programming-bbrown/c_015.htm

所以nRolls[rand()%6+1][rand()%6+1]+=1; 你可以代替

++(nRolls[rand()%6+1][rand()%6+1]);

此外,数组是零索引的,这意味着当你这样做时,rand()%6+1你会限制从1to的值6并忽略0数组的位置,这是第一个,所以考虑只使用

++(nRolls[rand()%6][rand()%6]);

然后,要找出你滚动 a (i,j) 的频率,其中 i 和 j 在 1 和 6 之间,

cout << "(" << i << "," << j << "):" << nRolls[i-1][j-1] << endl;
于 2012-06-07T14:11:05.010 回答
4

您将在这里遇到问题,因为您将 +1 添加到 rand()%6 您将永远不会增加任何索引为零的元素的计数。您允许递增的最小元素索引从 1 开始。

于 2012-06-07T14:12:35.280 回答
1

好的,谢谢你的帮助。这是正确显示的更新代码!

cout << "\nDice roll analyzer" << endl;

srand(time(0));

const int first = 6;
const int second = 6;
int nRolls[first][second];
int count = 0;

while (count < 10000){
    nRolls[rand()%6][rand()%6]++;
    count++;
}

for (int i=0;i<first;i++){
    for (int j=0;j<second;j++){
        cout << "(" << i+1 << "," << j+1 << ")" << nRolls[i][j] << endl;
    }
}
于 2012-06-07T14:33:17.437 回答