この、「
と同じ数字があるかどうかを...」 の部分は、
以下のようなコードで書けます。
for(k=1;k<=N;k++)
if(input[k]==kadai[j]){
A++
if(j==k) H++
break
}
一致するものがあれば
なお、これは 1 から
までの全ての
に対して実行してもよいのですが、
すでに配列の値の数字は重複しないことが保障されているので、
もし一致した数字があればその後の
に対しては実行する必要がありません。
よって、一致した場合に break 文で for 文を中断しています。
break 文は、for 文や while 文などのループから途中で抜けるための命令で、
break 文が呼び出されると、最も内側のループ一つから抜けだします。
あとは、これを全ての
に行えばいいので、
結局次のような関数で判定ができます。
# 一致したら 1, そうでなければ 0 を返す
# B,H は大域変数としてそこに結果を代入する
function judgeinput(N,input,kadai, j,k,A)
{
H=0 # 数も場所も合っているものの個数
A=0 # 数が合っている (H も含む) ものの個数
for(j=1;j<=N;j++)
for(k=1;k<=N;k++)
if(input[k]==kadai[j]){
A++
if(j==k) H++
break
}
B=A-H
if(H>=N) return 1
else return 0
}