2024年3月10號題解

lwj1239發表於2024-03-10

299.猜數遊戲

解題思路

  1. 對出現的數字在兩個陣列中進行統計
  2. 先計算公牛的個數,如果有那麼統計的數字的數量對應減一,因為統計是用來算奶牛的數量的
  3. 遍歷統計陣列,奶牛的數量加上兩個陣列中最小的值,因為是匹配,所以不可能多出來的也可以匹配,所以是加上其中的最小值

程式碼實現

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;
}