[CareerCup] 17.5 Game of Master Mind 猜字游戏

 

17.5 The Came of Master Mind is played as follows: The computer has four slots, and each slot will contain a ball that is red (R), yellow (Y), green (C) or blue (B). For example, the computer might have RGGB (Slot # 1 is red, Slots #2 and #3 are green, Slot #4 is blue). You, the user, are trying to guess the solution. You might, for example, guess YRGB. When you guess the correct color for the correct slot, you get a "hit." If you guess a color that exists but is in the wrong slot, you get a "pseudo-hit." Note that a slot that is a hit can never count as a pseudo-hit. For example, if the actual solution is RGBYandyou guess GGRR, you have one hit and one pseudo-hit. Write a method that, given a guess and a solution, returns the number of hits and pseudo-hits.

 

LeetCode上的原题,讲解请参见我之前的博客Bulls and Cows

 

解法一:

string getHint(string answer, string guess) {
    int m[256] = {0}, h = 0, p = 0;
    for (int i = 0; i < answer.size(); ++i) {
        if (answer[i] == guess[i]) ++h;
        else ++m[answer[i]];
    }
    for (int i = 0; i < answer.size(); ++i) {
        if (answer[i] != guess[i] && m[guess[i]]) {
            ++p;
            --m[guess[i]];
        }
    }
    return to_string(h) + "H" + to_string(p) + "P";
}

 

解法二:

string getHint(string answer, string guess) {
    int m[256] = {0}, h = 0, p = 0;
    for (int i = 0; i < answer.size(); ++i) {
        if (answer[i] == guess[i]) ++h;
        else {
            if (m[answer[i]]++ < 0) ++p;
            if (m[guess[i]]-- > 0) ++p;
        }
    }
    return to_string(h) + "H" + to_string(p) + "P";
}

 

CareerCup All in One 题目汇总

posted @ 2016-04-22 10:28  Grandyang  阅读(928)  评论(0编辑  收藏  举报
Fork me on GitHub