[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>29問目

29問目(ヒットアンドブロー、条件判定)

問題

ヒットアンドブローというゲームがあります。Aさんが4つの異なる数字を思い浮かべ、Bさんがその数字を当てます。Bさんが答えた4つの数字に対し、Aさんは次の二つを答えます。

この結果を手がかりにBさんは再び4つの数字を選びAさんに伝えます。

たとえばAさんが『4583』という数を思い浮かべます。

それにBさんが『2537』と答えたとします。

この場合「1ヒット1ブロー」とAさんは答えることになります。

Aさんの4つの数字とBさんの4つの数字を入力してヒットとブローの数を出力してください。

なお、入力される数字は0~9の範囲で4つの数字は全て異なります。

入力


a1(Aさん1個目の数字:0~9の整数)
a2(Aさん2個目の数字:0~9の整数)
a3(Aさん3個目の数字:0~9の整数)
a4(Aさん4個目の数字:0~9の整数)
b1(Bさん1個目の数字:0~9の整数)
b2(Bさん2個目の数字:0~9の整数)
b3(Bさん3個目の数字:0~9の整数)
b4(Bさん4個目の数字:0~9の整数)

出力


ヒット数(整数) ブロー数(整数)

入力例


4
5
8
3
2
5
3
7

出力例


1
1

解き方例

for文で回して条件判定です。

ソースコード

お持ち帰り

C/C++

#include <stdio.h>

int main(){
    int a[4],b[4];
    int hit,blow;
    int i;

    for(i=0;i<4;i++){
        scanf("%d",&(a[i]));
    }
    for(i=0;i<4;i++){
        scanf("%d",&(b[i]));
    }

    hit =blow =0;
    for(i=0;i<4;i++){
        int j;
        for(j=0;j<4;j++){
            if(a[i] ==b[j]){
                if(i==j){
                    hit++;
                }else{
                    blow++;
                }
            }
        }
    }
    printf("%d\n%d\n",hit,blow);

    return 0;
}

その他

もっと簡単な方法もありそうですが、妥協点です。


ページの一番上へ
前のページへ 一覧に戻る 次のページへ
初版2006-5-28
[Atelier Blue アトリエブルー]Homeコンテストパソコン甲子園2003年本選>29問目