试图检查带有数组(yahtzee)C 的3种类型

  • 本文关键字:yahtzee 类型 3种 数组 c++
  • 更新时间 :
  • 英文 :


我正在尝试检查保存骰子卷(最多可达5)是一种,因此我试图将骰子掷骰值与彼此。

R的第一个值当然显示为0,但是每次代码后R的第二个值显示为8191,我不完全确定为什么。

我也尝试使用r 而不是r = r 1,但是当然没有改变任何东西。

int r = 0;
          cout << "first value of R is " << r << endl;
          for(int t = 0; t < 5; t++) {
            for(int w = 0; w < 5; w++) {
              if(keptDice[t] == keptDice[w] ) {
                r += r + 1;
              }
            }
          }
          cout << "Value of R is " << r << endl;

的重点是,在第二个循环中,yo yo从t(int w = t; ...)开始,否则,您将将每个骰子与自身自然相等的每个骰子进行比较。加上使用R 而不是R = R 1,这绝对是错误的,但我认为这只是拼写错误。

int r = 0;
cout << "first value of R is " << r << endl;
for(int t = 0; t < 5; t++) {
    for(int w = t; w < 5; w++) {
        if(keptDice[t] == keptDice[w] ) {
            r++;
        }
    }
}
cout << "Value of R is " << r << endl;
r += r + 1

与写作相同

r = r + r + 1

r每次都在增加一倍。有趣的是,它总是小于2^n

r = 0 + 0 + 1 (1)
r = 1 + 1 + 1 (3)
r = 3 + 3 + 1 (7)
r = 7 + 7 + 1 (15)
r = 15 + 15 + 1 (31)
r = 31 + 31 + 1 (63)
r = 63 + 63 + 1 (127)
r = 127 + 127 + 1 (255)
r = 255 + 255 + 1 (511)
r = 511 + 511 + 1 (1023)
r = 1023 + 1023 + 1 (2047)
r = 2047 + 2047 + 1 (4095)
r = 4095 + 4095 + 1 (8191)

您的程序正在计算13场比赛。对于Yahtzee,您可能想要一个数数数数匹配,否则您在每个模具上都会加倍。例如,如果您有

1 2 3 4 1

它将计数第一个匹配最后一个模具和最后一个模具与第一个匹配(2个匹配)。

更明智的是计算您有多少个,有多少个2,然后存储在数组中

int diceCount[6];
for(int num = 1; num <= 6; num++) {
        for(int w = 0; w < 5; w++) {
          int count = 0;
          if(keptDice[w] == num ) {
            count++;
          }
          diceCount[num-1] = count;
        }

这样完成后,如果您有两个1,那么DiceCount [0]将为2

基于您的方法,但概括为n-a-kind:

int N = 3; // N in [1;5]
bool isNOfAKind = false;
for(int t = 0; t < 6-N; t++) { // skip searches with less elements than N
    int r = 0; // r must be reset for each count
    for(int w = t+1; w < 5; w++) { // avoid comparing to self
        if(keptDice[t] == keptDice[w]) {
            r++;
        }
    }
    // found a solution already? then bail out.
    if(r == N) {
        isNOfAKind = true;
        break;
    }
}
cout << N << " of a kind? " << isNOfAKind << endl;

最新更新