基本情報技術者試験 令和6年 科目B 問1「最大値を求める関数」の考察

FE対策

はじめに

基本情報技術者試験(FE)を受験する人にとって、アルゴリズムとプログラミングの理解は必須である。
今回は、令和6年公開問題の科目Bに出題された「3つの整数から最大値を求める関数」について考察していく。


スポンサーリンク
スポンサーリンク

問題の概要

問題文では、関数 maximum の実装を問われている。
この関数は、3つの整数 x, y, z を引数に受け取り、最大値を返す仕様となっている。
プログラムの構造は以下のようになっている。

○整数型: maximum(整数型: x, 整数型: y, 整数型: z)
 if ( )  ← ここに適切な条件を入れる
   return x
 elseif (y > z)
   return y
 else
   return z
 endif

最初の if 文に適切な条件を入れることが求められている。


解答群の考察

与えられた選択肢は次の通り。

選択肢 条件式
x > y
x > y and x > z
x > y and y > z
x > z
x > z and z > y
z > y

では、それぞれの条件を分析し、どれが正しいのか検証していこう。


正解の条件

最大値を求めるためには、最初のif文で x が最大値であることを確実に判定する必要がある。
つまり、xyz の両方よりも大きい場合 に x を返せばよい。

この条件を満たすのは x > y and x > z だ。
したがって、選択肢 「」 が正解となる。


なぜ他の選択肢は誤りなのか?

それぞれの選択肢について、どこが問題なのか詳しく見ていこう。

ア: x > y

xy より大きくても z との比較をしていないため、zx より大きい場合に誤動作する。
例: x = 3, y = 2, z = 4 の場合、x > y だが z の方が大きいため、x を返してはいけない。

ウ: x > y and y > z

x > y であり、かつ y > z の場合にのみ成り立つが、yz より小さい場合に xz より大きくても判定が通らない。
例: x = 5, y = 3, z = 4 の場合、y > z が成り立たないため、誤判定となる。

エ: x > z

xz より大きくても y との比較をしていないため、y の方が x より大きいケースを考慮していない。
例: x = 3, y = 4, z = 2 の場合、x > z は成り立つが、y の方が大きいため誤判定となる。

オ: x > z and z > y

x > z かつ z > y の場合に成立するが、z の値に依存しているため、y の方が x より大きいケースを考慮できていない。
例: x = 5, y = 4, z = 3 の場合、z > y が成り立たないため、誤判定となる。

カ: z > y

→ この条件は elseify > z を評価するための前提条件として適しているが、最初の if 文には適していない。


結論

この問題では 「x が最大値である条件」 を適切に記述する必要がある。
そのため、最適な選択肢は 「イ: x > y and x > z」 である。


補足: コードでの検証

もし Python で実装すると、次のように最大値を求めることができる。

def maximum(x, y, z):
    if x > y and x > z:
        return x
    elif y > z:
        return y
    else:
        return z

テストケースを実行してみよう。

print(maximum(3, 2, 4))  # 期待値: 4
print(maximum(5, 3, 4))  # 期待値: 5
print(maximum(1, 6, 2))  # 期待値: 6
print(maximum(7, 7, 7))  # 期待値: 7

このように x > y and x > z という条件を最初に判定することで、3つの値の中から最大値を適切に選択できる。


まとめ

基本情報技術者試験では、単なる文法理解だけでなく、条件分岐の適切な設計 が求められる。
この問題は、条件式の適切な組み立て方を学ぶ良い例だ。

要点の整理
if 文では x が最大値であることを判定するため 「x > y and x > z」 を指定する必要がある。
– 他の選択肢は、それぞれ不完全な条件のため不適切。
– Python のコードで考えると、実装の正しさがよく理解できる。

アルゴリズムの本質を押さえておけば、どんな問題でも冷静に分析できるはずだ。試験本番でも、焦らずしっかりと条件を確認していこう。

コメント