この、「 と同じ数字があるかどうかを...」 の部分は、 以下のようなコードで書けます。
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 }