我正在尝试检查保存骰子卷(最多可达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;