###### tags: `LeetCode` `Medium` # LeetCode #299 [Bulls and Cows](https://leetcode.com/problems/bulls-and-cows) ### (Medium) 你在和朋友一起玩 猜數字(Bulls and Cows)遊戲,該遊戲規則如下: 你寫出一個秘密數字,並請朋友猜這個數字是多少。 朋友每猜測一次,你就會給他一個提示,告訴他的猜測數字中有多少位屬於數字和確切位置都猜對了(稱為“Bulls”, 公牛),有多少位屬於數字猜對了但是位置不對(稱為“Cows”, 奶牛)。 朋友根據提示繼續猜,直到猜出秘密數字。 請寫出一個根據秘密數字和朋友的猜測數返回提示的函數,返回字符串的格式為 xAyB ,x 和 y 都是數字,A 表示公牛,用 B 表示奶牛。 xA 表示有 x 位數字出現在秘密數字中,且位置都與秘密數字一致。 yB 表示有 y 位數字出現在秘密數字中,但位置與秘密數字不一致。 請注意秘密數字和朋友的猜測數都可能含有重複數字,每位數字只能統計一次。 --- 先計算全部位置相同且數字相同的個數(A), 再計算猜測與答案中0-9的分別個數, 並且將猜測與答案的0-9的個數中較小的數(也就是兩者相同的0-9個數)加總並且減去A的個數即得B的個數。 回傳幾A幾B。 ``` class Solution { public: string getHint(string secret, string guess) { int counta = 0; int countb = 0; vector<int> s(10,0); vector<int> g(10,0); for(int i=0;i<secret.size();i++){ if(secret[i]==guess[i])counta++; int is=secret[i]-'0'; int ig=guess[i]-'0'; s[is]++; g[ig]++; } for(int i=0;i<10;i++){ countb+=min(s[i],g[i]); } return to_string(counta)+"A"+to_string(countb-counta)+"B"; } }; ``` ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up