299.猜數遊戲
解題思路
- 對出現的數字在兩個陣列中進行統計
- 先計算公牛的個數,如果有那麼統計的數字的數量對應減一,因為統計是用來算奶牛的數量的
- 遍歷統計陣列,奶牛的數量加上兩個陣列中最小的值,因為是匹配,所以不可能多出來的也可以匹配,所以是加上其中的最小值
程式碼實現
int min(int a, int b) {
return a <= b? a: b;
}
char* getHint(char* secret, char* guess) {
char* ans = (char*)malloc(sizeof(char) * 1001);
int res1 = 0;
int res2 = 0;
int a[10] = {0};
int b[10] = {0};
for (int i = 0; secret[i]; i ++) {
a[secret[i] - '0'] ++;
b[guess[i] - '0'] ++;
if (secret[i] == guess[i]) {
res1 ++;
a[secret[i] - '0'] --;
b[guess[i] - '0'] --;
}
}
for (int i = 0; i < 10; i ++) {
res2 += min(a[i], b[i]);
}
int i = 0;
if (res1) {
int a[1001] = {0};
int size = 0;
while(res1) {
a[size ++] = res1 % 10;
res1 /= 10;
}
while(size) {
ans[i ++] = a[--size] + '0';
}
}
else {
ans[i ++] = '0';
}
ans[i ++] = 'A';
if (res2) {
int a[1001] = {0};
int size = 0;
while(res2) {
a[size ++] = res2 % 10;
res2 /= 10;
}
while(size) {
ans[i ++] = a[--size] + '0';
}
}
else {
ans[i ++] = '0';
}
ans[i ++] = 'B';
ans[i ++] = 0;
return ans;
}