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;
}