我想要一頭公牛隊和奶牛隊的比賽。 「公牛和奶牛」是一個遊戲,其中產生了一個祕密號碼,你試圖猜測它。公牛隊和奶牛隊的比賽在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個位置,就沒有辦法避免重複。 –
我知道,但這是我分配的。我能想到克服這個問題的唯一方法就是有一種方法只計算一次數字 –