好吧我就是個暴力法的擁護者啊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
沒有留言:
張貼留言