a291
輸入說明 :
多筆輸入。 第一行有四個介於0-9之間的數字,代表正確的密碼 第二行有一個整數n,1<=n<=10000,代表接下來嘗試n組密碼 接下來有n行,每行有四個介於0-9之間的數字,每行各代表一組嘗試的密碼。
輸出說明 :
輸出n行。 對於每組嘗試的密碼,若有p個數字的值正確,且在正確的位子上, 另外有q個數字的值正確,但不在正確的位子上, 輸出pAqB。 範例見測資。
先去找有幾個位置是數字對位置也對的,再來第二部份比較複雜,先舉個例子
密碼:1101 猜測:1010
這樣要算1A2B,所以每次再檢查B次數的時候,要把A排除,B重複的就不能算了,把重複的那一格設成2,不懂的話可以拿測資對自己的程式碼模擬
#include<stdio.h>
int main(){
int secret[4];
int guess[4];
int check[4];
int n;
int p,q;
int i,j,k;
while(scanf("%d %d %d %d",&secret[0],&secret[1],&secret[2],&secret[3])!=EOF)
{
scanf("%d",&n);
for(j=0;j<n;j++)
{
q=0;
p=0;
for(i=0;i<4;i++)
{
scanf("%d",&guess[i]);
if(guess[i]==secret[i])
{
p++;
check[i]=1;
}
else
check[i]=0;
}
for(i=0;i<4;i++)
{
if(check[i]!=1)
for(k=0;k<4;k++)
if(check[k]==0 && secret[i]==guess[k])
{
q++;
check[k]=2;
break;
}
}printf("%dA%dB\n",p,q);
}
}
return 0;
}