Test Message

c276: 沒有手機的下課時間

內容

文文上廁所時不小心把手機掉進馬桶裡了,所以現在下課時間他就沒辦法玩「傳說對決」,於是他就到處找人玩 xAxB 的遊戲。

在這個遊戲中,你要在心理想一個四位數數字讓對手去猜,每一位數都不可以重覆,例如 2343 裡有兩個 3,就是個不合法的數字。每次對手猜測你的數字時,你要根據對手的猜測給予提示。如果對手的四位數中有若干位數和你的答案相同,而且在正確的位置上,我們稱這些位數為 A。例如你的答案為 1536,對方猜 1234,那麼 1 和 3 就是 A。但是如果數字相同,位置不同,我們稱這些位數為 B。例如你的答案為 1536,對手猜 2345,那麼 3 和 5 就是 B。當然對手的猜測很有可能同時有 A 也有 B,例如你的答案是 1536,對手的猜測為 3456,那麼你應該給對手的提示就是 1A2B。如果所得到的提示是 4A0B,就代表完全答對!

給你文文心裡所想的四位數數字及對手所猜的數字,請你幫文文算算看要給對手什麼提示。


輸入

輸入的第一行有一個四位數的整數,代表文文心中所想的數字。

第二行有一個整數 n (n ≤ 1000),代表對手猜測的次數,接下來有 n 行,每行有一個四位數整數,代表對方的猜測。

1536
5
1234
2345
3456
2480
1536

輸出

對於對手的每一次猜測,請輸出 xAxB 的提示於一行。

2A0B
0A2B
1A2B
0A0B
4A0B


解題思路

a291 一樣的題目,只是輸入方式改變而已,就不再寫一次題解了,有需要請自行前往。


完整程式碼

AC (2ms, 92KB)
#include <stdio.h>

int main()
{
int n;
char ans[5], test[5];
while (scanf(" %s %d", ans, &n) == 2)
{
for (int i = 0; i < 4; i++)
ans[i] -= '0';
while (n--)
{
char ansCount[10] = { 0 }, testCount[10] = { 0 }, a = 0, b = 0;
scanf(" %s", test);
for (int i = 0; i < 4; i++)
test[i] -= '0';
for (int i = 0; i < 4; i++)
{
if (test[i] == ans[i])
a++;
else
{
if (ansCount[test[i]])
b++, ansCount[test[i]]--;
else
testCount[test[i]]++;
//
if (testCount[ans[i]])
b++, testCount[ans[i]]--;
else
ansCount[ans[i]]++;
}
}
printf("%dA%dB\n", a, b);
}
}
return 0;
}