我正试图让公牛和奶牛的比赛奏效。 "公牛和奶牛"是一个生成密码的游戏,你试图猜测它。
即:代码0123,猜测为0245有1头公牛(零)和1头牛,因为有两个但不在那个位置。
我的游戏只使用1和0,但长度为9位。使用下面的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;
答案 0 :(得分:0)
首先,一个问题:既然你的游戏只适用于0和1,那么以下是不是真的?
这可以为您提供更简单的解决方案。
无论如何,让我们想一个更普遍的情况,你不仅限于1和0。
开始迭代猜测:
int bulls = 0;
int cows = 0;
对于每个猜测,检查它是否是公牛。如果是,则增加公牛的数量。否则,检查它是否是牛。
for (int i = 0; i < guess.size(); i++) {
if (isBull(guess, n, i)) {
bulss++;
}
else if (isCow(guess, n, i)) {
cows++;
}
}
这是您的功能isBull
应该是什么样的(我猜测guess
应该是std::vector<int>
类型,但我不太确定关于n
;因为你没有明确说明,我只是放了一些内容)
int isBull(<datatype> guess, <dataype> solution, int pos) {
return guess[pos] == solution[pos];
}
isCow()
应该有类似的参数。如果solution
中的值出现,它应该只检查guess[pos]
中的所有位置。它可能会涉及到这样的事情:
for (int i = 0; i < SOMETHING; i++) {
if (i != pos && guess[pos] == solution[i]) {
DO SOMETHING;
}
}
我希望你能理解我试图去做的地方。我真的不想破坏你的乐趣/学习过程,所以我会离开&#34; DO SOMETHING&#34;为了你完成。但如果您有疑问,请发表评论,然后我会尝试回答。
我想说的一件事:只有在你确定它不是公牛的情况下,才能验证猜测中的位置是否是牛。它会真正简化你的思维过程。
答案 1 :(得分:0)
thanks for the help but i went another way.
if anyone else needs an answer to this:
//checking bull or cow
for (int i = 0; i < guess.size(); ++i)
{
if (guess[i] == n[i]) //correct n`enter code here`um in right position
bull++;
}
// finding and seperating cows
int cow1 = 0, cow0 = 0;
for (int i = 0; i < guess.size(); ++i)
{
if (guess[i] != n[i])
{
if (guess[i] == 1)
cow1++;
else
cow0++;
}
}
if (cow0 < cow1)
{
cow = cow0;
}
else
cow = cow1;
cow = cow * 2;