我正在尝试检查保持的骰子卷(最多可以是5个)是否是3种,所以我试图将骰子卷值相互比较。
当然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;
答案 0 :(得分:1)
r += r + 1
与写作相同
r = r + r + 1
每次都会翻倍。有趣的是,它总是小于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
它将计算与最后一个模具匹配的前1个和与第一个模具匹配的最后一个模具(2个匹配)。
更明智的是计算你有多少1,你有多少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
答案 1 :(得分:1)
关键是在第二个for循环中你有从t开始的tor(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;
答案 2 :(得分:0)
根据您的方法,但推广到N-of-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;