299 猜數字遊戲

2021-10-03 22:52:26 字數 1837 閱讀 6732

你正在和你的朋友玩 猜數字(bulls and cows)遊戲:你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了(稱為「bulls」, 公牛),有多少位數字猜對了但是位置不對(稱為「cows」, 奶牛)。你的朋友將會根據提示繼續猜,直到猜出秘密數字。

請寫出乙個根據秘密數字和朋友的猜測數返回提示的函式,用 a 表示公牛,用 b 表示奶牛。

請注意秘密數字和朋友的猜測數都可能含有重複數字。

輸入: secret =

"1807"

, guess =

"7810"

輸出:"1a3b"

解釋:1 公牛和 3 奶牛。公牛是 8,奶牛是 0

,1 和 7。

輸入: secret =

"1123"

, guess =

"0111"

輸出:"1a1b"

解釋: 朋友猜測數中的第乙個 1 是公牛,第二個或第三個 1 可被視為奶牛。

說明: 你可以假設秘密數字和朋友的猜測數都只包含數字,並且它們的長度永遠相等。

這題的意思就是,如果對等位上相等,算公牛。如果猜對了數字但是沒猜對位置算奶牛。這裡要注意一點就是不能重複計算。

我們可以用2個hashmap來分別儲存secret和guess中對應位置不相等的值,並用value進行計數。相等則對bulls進行計數。

然後我們再遍歷某個hashmap,計算相同key時value較小的那個即可。(方法一)

但是這樣效率很差。於是做了點優化。把字串轉成字元陣列再處理。(方法二)

這樣還是不夠快,因為我們沒必要用hashmap這種重**,因為題目說了只是數字,所以我們可以用陣列充當hash表,同時,對最後的字串拼接進行優化,用stringbuilder進行處理。(方法三)

public string gethint

(string secret, string guess)

else

else

if(map1.

containskey

(guess.

charat

(i))

)else}}

for(character key: map.

keyset()

)}return bulls+

"a"+cows+

"b";

}

public string gethint1

(string secret, string guess)

else

else

if(map1.

containskey

(guessc[i]))

else}}

for(character key: map.

keyset()

)}return bulls+

"a"+cows+

"b";

}

public string gethint2

(string secret, string guess)

else

}for

(int i =

0; i < secretc.length; i++

) stringbuilder sb =

newstringbuilder()

;return sb.

(bulls).(

"a")

.(cows).(

"b")

.tostring()

;}

299 猜數字遊戲

你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將會根據提示繼續猜,直到猜出秘密數字。請寫出乙個根據秘...

299 猜數字遊戲

你正在和你的朋友玩 猜數字 bulls and cows 遊戲 你寫下乙個數字讓你的朋友猜。每次他猜測後,你給他乙個提示,告訴他有多少位數字和確切位置都猜對了 稱為 bulls 公牛 有多少位數字猜對了但是位置不對 稱為 cows 奶牛 你的朋友將會根據提示繼續猜,直到猜出秘密數字。請寫出乙個根據秘...

299 猜數字遊戲

題目描述 你在和朋友一起玩 猜數字 bulls and cows 遊戲,該遊戲規則如下 你寫出乙個秘密數字,並請朋友猜這個數字是多少。朋友每猜測一次,你就會給他乙個提示,告訴他的猜測數字中有多少位屬於數字和確切位置都猜對了 稱為 bulls 公牛 有多少位屬於數字猜對了但是位置不對 稱為 cows ...