2022年6月8日 星期三

[299] Bulls and Cows

好吧我就是個暴力法的擁護者啊XD 各種迴圈開下去一些都很happy啊XD
雖然不是很想要回想起來, 但是前老闆們總是說:  先求有 再求好
不是嗎><~~~~~~

char * getHint(char * secret, char * guess){
    int i,j,bulls=0;
    int cows=0;
    int length=strlen(secret);
    for(i=0; i<length; i++)
    {
        if (secret[i]==guess[i])
        {
            secret[i]=-1;
            guess[i]=-1;
            bulls++;
        }
    }
    for(i=0;i<length;i++)
    {
        for (j=0;j<length;j++)
        {
            if ((guess[i] >=0) &&
                (secret[j]==guess[i]))
            {
                secret[j]=-1;
                guess[i]=-1;
                cows++;
                break;
            }
        }        
    }
    char *AABB;
    AABB = malloc (sizeof (char*) * length);
    sprintf(AABB,"%dA%dB",bulls,cows);
    return AABB;

結果當然是這樣兩層loop 給它掃下去太慢了
其實是可以掃一倫然後紀錄每個數字出現的次數 , 這裡如果位置一樣那麼A++, 但數字出現的次數都不加, 所以不會重覆算進B 裡. 
之後再去比對數字出現的多寡, 如果猜的次數比實際次數多, 那B 就是實際出現的數字, (很有可能是0 ) . 反過來如果猜的次數比實際次數少次, 那B 是等於猜的次數.
暫時還沒有照像寫一遍, (因為感覺差不多?!)以上XD

沒有留言:

張貼留言