比较数组中的随机值

Comparing random values in an array

本文关键字:随机 数组 比较      更新时间:2023-10-16

我是自学C++的,所以如果答案真的很明显,请原谅我!

我正在为几年前开发的一款骰子游戏编写代码,我需要能够比较结果的值。我的想法是,如果我创建一个数组,并将5个骰子中的每一个分配给数组中的一个点,那么只需写几行代码就可以检查其中是否有相等的部分。

诀窍是——我需要能够检查成对、三重、四重、五重和双对。我根本不知道该怎么做,而且我似乎在数组上找不到任何对我有帮助的东西。使用数组是最好的方法吗,还是有更容易的方法?或者,我是否必须简单地写出每一个比较组合,然后继续下一步?

这是我到目前为止的(删节的)代码——不多,但这是我目前正在使用的代码。

#include <time.h>
#include <iostream>
using namespace std;
int d1;         //die 1
int d2;         //die 2
int d3;         //die 3
int d4;         //die 4
int d5;         //die 5
int dice [5];   //all 5 dice
int sum;        //the sum of all the dice
int main()
{
    srand(time(NULL));
    d1 = rand() % 6 + 1;
    d2 = rand() % 6 + 1;
    d3 = rand() % 6 + 1;
    d4 = rand() % 6 + 1;
    d5 = rand() % 6 + 1;
    sum = d1 + d2 + d3 + d4 + d5;
    if (dice [] = dice [])
        cout << endl << dice [];
    return 0;
}

显然,dice []不起作用。我正在努力构建我想要的逻辑,但我做得不够。我可以使用一个结构吗?我试着想任何事情,但当涉及到实际比较不同的数字以确定它们是否相等时,我是一片空白。我觉得必须有某种方法来键入if (dice [x.1] = dice [x.2]),其中dice [x.1]代表五个数字中的任何一个,dice [x.2]是另一个。

d1 = rand() % 6 + 1;
d2 = rand() % 6 + 1;
d3 = rand() % 6 + 1;
d4 = rand() % 6 + 1;
d5 = rand() % 6 + 1;

应该是这样的:

for (int i=0; i<5; ++i)
    d[i] = rand() % 6 + 1; 

然后,要计算每个数字滚动的实例数,请尝试以下操作:

int dieFaces[6] = {0};
for(int i=0; i<5; ++i) {
    dieFaces[d[i]-1]++;
}

但是,如果滚动的顺序很重要,我们实际上甚至只需要d[]数组。如果您只需要轧制模具的值,我们可以将两个循环合并为:

int dieFaces[6] = {0};
for(int i=0; i<5; ++i) {
    int face = rand() % 6;
    dieFaces[face]++;
}

无论哪种方式,在填充dieFaces之后,您都可以通过访问比您感兴趣的面少1的元素来访问为任何特定模具面滚动的数字(数组为0索引)。

所以,如果你想知道有多少个5被滚动:

int fivesRolled = dieFaces[4];

如果你想检查是否有三元组被滚动:

bool triplesRolled = false;
for(int i = 0; i<6; ++i) {
    if(dieFaces[i] == 3) {
        triplesRolled = true;
        break;
    }
}

计算骰子的总和:

int sum = 0;
for(int i = 0; i<6; ++i) {
    sum += ((i+1) * dieFaces[i]);
}

不过,我可能只是在生成数字的同时计算总和。

一种可能的思考方式是,当生成数字时,不要将数组中的每个不同索引视为单独的骰子,而是将每个索引视为滚动该索引的骰子数
例如,如果您有5个六边模具,并轧制2、2、4、5、6,则可能会有一个看起来像[0、2、0、1、1、1]的数组。然后,您可以在数组上迭代,寻找感兴趣的值来记录它们
当然,如果你需要知道哪个骰子掷了哪个值,那么这并没有多大帮助,而且对于每个骰子都有不同的边这样的事情来说,这也不是特别灵活
希望这能让你对如何处理这个问题有一个想法。