我想要一头公牛队和奶牛队的比赛。 “公牛和奶牛”是一个游戏,其中产生了一个秘密号码,你试图猜测它。公牛队和奶牛队的比赛在C++中遇到了奶牛的问题
- 'bull'代表您何时在正确的位置猜出了正确的数字;
- 牛是一个正确的号码,但在错误的地方。
即:代码0123与猜测0245有1个公牛(零)和1个母牛,因为有两个但不在那个位置。
我的游戏只使用1和0,但是是九位数字。使用下面的for
循环,公牛很好,整齐,但我无法让奶牛工作。要么我得到一个荒谬的答案,如“36/9奶牛”或它只是休息。
该代码背后的思想观念是,如果不匹配的(不是公牛)对可以分为哪些是1和哪些是0,那么两个组中的较小者加倍时将是母牛,占1和0,同时丢弃其余的非公牛或母牛数量。
int bull = 0, cow = 0;
//checking bull or cow
for (int i = 0; i < guess.size(); ++i)
{
for (int j = 0; j < guess.size(); j++)
{
if (guess[i] == n[j] && j == i) //correct num in right position
bull++;
}
}
// finding and seperating cows
int cow1 = 0, cow0 = 0;
for (int i = 0; i < guess.size(); ++i)
{
for (int j = 0; j < guess.size(); j++)
{
if (guess[i] == n[j] && i != j && i == 1)
cow1++;
if (guess[i] == n[j] && i != j && i == 0)
cow0++;
}
}
if (cow0 < cow1)
cow = cow0;
else if (cow1 < cow0)
cow = cow1;
cow = cow * 2;
cout << "You have " << bull << "/9 bulls" << endl << "And " << cow << "/9 cows" << endl;
你在循环内部的条件是没有意义的。例如,为什么有两个循环用于计算公牛数量,如果有足够的数量并且您检查了例如'猜[i] == n [i]'。与第二个循环类似,在那里你根本不需要外部循环,因为在这种情况下,你只能对“guess [0]”和“guess [1]”进行检查。 –
*“我的游戏只使用1和0,但长度为9位数”*嗯。通常公牛和奶牛游戏的前提条件之一是,在秘密数字中,所有数字都是不同的。如果一个数字可能出现一次以上(如果秘密是'1123',我猜1561',它是一头,两头还是三头奶牛?),如何计算奶牛的数量并不十分清楚。但是如果你只有两个数字和9个位置,就没有办法避免重复。 –
我知道,但这是我分配的。我能想到克服这个问题的唯一方法就是有一种方法只计算一次数字 –