我的作法是先把正確答案複製一次,然後再用複製的答案比對,若比對的值一樣,則把陣列中資料改為'X'或'x',這樣就不會重複比對了
#include <stdio.h>
#include <string.h>
int main()
{
char answer[10]; // 儲存正確答案
char guess[10]; // 儲存每次猜測
char test[10]; // 複製 answer,用來標記已經比對過的字元
int m; // 猜測次數
int i ,j ,k;
int A; // A:位置與數字皆正確
int B; // B:數字正確但位置錯誤
// 輸入答案與猜測次數
scanf("%s %d",answer,&m);
int lenth=strlen(answer); // 計算答案長度
// 進行 m 次猜測
for(i=0;i<m;i++){
A=0; // 每次重新計算 A
B=0; // 每次重新計算 B
// 將 answer 複製到 test
// 用來在比對時標記已使用的字元
for(j=0;j<lenth;j++){
test[j]=answer[j];
}
// 輸入本次猜測
scanf("%s",guess);
// 計算 A(位置與數字都正確)
for(j=0;j<lenth;j++){
if(guess[j]==test[j]){
A++; // A +1
test[j]='X'; // 標記 answer 該位置已使用
guess[j]='x'; // 標記 guess 該位置已使用
}
}
// 計算 B(數字正確但位置錯誤)
for(j=0;j<lenth;j++){
for(k=0;k<lenth;k++){
// 若數字相同,代表為 B
if(test[j]==guess[k]){
test[j]='X'; // 標記 answer 的該字元已使用
guess[k]='x'; // 標記 guess 的該字元已使用
B++; // B +1
break; // ★ 找到一組就停止,避免重複計算
}
}
}
// 輸出結果(xAyB)
printf("%dA%dB\n",A,B);
}
return 0;
}