LeetCode //C - 299. Bulls and Cows
题目描述:
你在玩一个猜数游戏,目标是猜出一个4位数(无重复数字的4位数)。
对方每次会告诉你有多少位数字正确且位置正确,有多少位数字正确但是位置不正确。
例如,对方的数字为"1234",你的猜测为"5678",则会有如下反馈:
- 1 bull and 3 cows,因为"1"是位置正确的,而"3"、"6"、"7"、"8"都是数字正确但位置不正确。
编写一个函数,接收对方的数字和你的猜测,返回一个字符串表示答案。
示例:
secret = "1843"
guess = "3715"
返回 "1A3B" 表示有1个牛和3个牛的数字。
解决方案:
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
char * getHint(char * secret, char * guess) {
int bulls = 0;
int cows = 0;
bool used[10] = {false};
for (int i = 0; i < strlen(secret); i++) {
if (secret[i] == guess[i]) {
bulls++;
} else {
if (!used[secret[i] - '0']) {
used[secret[i] - '0'] = true;
cows++;
}
if (!used[guess[i] - '0']) {
used[guess[i] - '0'] = true;
cows++;
}
}
}
char *result = malloc(4);
sprintf(result, "%dA%dB", bulls, cows - bulls);
return result;
}
这段代码首先计算出正确的牛的数量,然后通过一个标记数组来计算出正确的牛的数量。最后,使用sprintf
函数将计算结果格式化为字符串。这个字符串是函数返回的答案。
评论已关闭