関数eq(X,Y)は,引数XとYの値が等しければ1を返し,異なれば0を返す。
整数A,B,Cについて,eq(eq(A,B),eq(B,C))を呼び出したとき,1が返ってくるための必要十分条件はどれか。
正答1
解説
正解は1です。
関数eqを入れ子にして呼び出したときに1が返る条件を考える問題です。
外側のeqは、eq(A,B)とeq(B,C)の値が等しいときに1を返します。
値が等しくなるのは、2つがともに1のときと、ともに0のときです。
ともに1はA=BかつB=C、ともに0はA≠BかつB≠Cを意味します。
【選択肢別解説】
1:○ 「ともに1」と「ともに0」の2つの場合をそのまま表しています。
この条件を満たすときに限り1が返るので、必要十分条件です。
2:× 後半の「A≠B又はB≠C」は、A=BでB≠Cの場合も含みます。
このときeq(A,B)は1、eq(B,C)は0となり、0が返るので条件として広すぎます。
3:× A=1、B=2、C=3のとき、内側はともに0なので1が返ります。
しかしA=Cではないため、この条件は必要条件になっていません。
4:× A=B=1、C=2のとき、条件は成り立ちます。
しかし内側の値は1と0で異なるので0が返り、十分条件になっていません。
【ポイント】
eq(eq(A,B),eq(B,C))は、2つの比較結果が一致するかどうかを判定しています。
このような問題は、選択肢ごとに具体的な数値で反例を探すと確実に判定できます。