基本情報技術者試験 科目B サンプル問題 問2の解説|3と5で割り切れるかを判定する fizzBuzz

基本情報技術者試験

科目B サンプル問題 問2難易度 ★擬似言語・if と elseif の順番最終更新 2026-09-22

プログラムは12行で、配列も繰返しも出てきません。決め手は1つ ── if と elseif は、上から見て最初に真になった1つだけを実行すること。これで、15 のように 3 でも 5 でも割り切れる数がどの行で決まるかが分かり、空欄は自分で書けます。

難易度 ★(当サイトの目安)── 条件を並べる順番(両方で割り切れるほうを先)に気づけば決まる。4段階の決め方は科目B 最短合格の戦略にあります。

出題

出典:基本情報技術者試験 科目B サンプル問題 問2

次のプログラム中の  a  ~  c  に入れる正しい答えの組合せを,解答群の中から選べ。

関数fizzBuzz は,引数で与えられた値が,3 で割り切れて5 で割り切れない場合は“3 で割り切れる”を,5 で割り切れて3 で割り切れない場合は“5 で割り切れる”を,3 と5 で割り切れる場合は“3 と5 で割り切れる”を返す。それ以外の場合は“3 でも5 でも割り切れない”を返す。

〔プログラム〕

○文字列型: fizzBuzz(整数型: num)
  文字列型: result
  if (num が  a  で割り切れる)
    result ← " a  で割り切れる"
  elseif (num が  b  で割り切れる)
    result ← " b  で割り切れる"
  elseif (num が  c  で割り切れる)
    result ← " c  で割り切れる"
  else
    result ← "3 でも 5 でも割り切れない"
  endif
  return result

解答群

ア a = 3 / b = 3 と5 / c = 5

イ a = 3 / b = 5 / c = 3 と5

ウ a = 3 と5 / b = 3 / c = 5

エ a = 5 / b = 3 / c = 3 と5

オ a = 5 / b = 3 と5 / c = 3

※ 解答群の原本は a・b・c を3つの列に分けた表です。当サイトでは1行にまとめて引用しました(字句は変えていません)。

答えだけ先に見る

正解は ウ(a = 3 と5/b = 3/c = 5)です。

この問題に出てくる記号

読めない記号があったときだけ開いてください。

擬似言語の記号 6コ の読み方をひらく
書き方 読み方
○文字列型: fizzBuzz(整数型: num) ここから関数が1つ始まるという印。整数を1つ受け取って num という名前を付け、文字列を1つ返します
文字列型: result 文字列を入れる箱 result を用意する。この時点ではまだ何も入っていません
result ← "…" 右の文字列を result に入れる
if / elseif / else 上から順に条件を見て、最初に真になった1つだけを実行する。どれも偽なら else の下を実行する(成り立つことを真、成り立たないことを偽といいます)
num が 3 で割り切れる num を 3 で割った余りが 0 なら真
return result result の中身を返して、関数を終える

空欄 a に入るものを決める

決めるのは、いちばん上のこの2行です。

〔プログラム〕空欄 a の2行(上の〔プログラム〕から抜き出した。1字も変えていない)

  if (num が  a  で割り切れる)
    result ← " a  で割り切れる"

※ 上の〔プログラム〕からの抜粋です(1字も変えていません)。

まず、15 がどの行で決まるかを考えます。15 は 3 で割り切れ、5 でも割り切れます。つまり 「3 で割り切れる」「5 で割り切れる」「3 と5 で割り切れる」のどれを聞いても真です。

ところが if と elseif は、最初に真になった1つだけを実行し、その下の条件はもう見ません。だから15 は、いちばん上で聞かれたものに決まってしまいます。

15 は、いちばん上で聞かれたものに決まる

琥珀=最初に真になった条件 / 赤=問題文と違う答え / 緑=問題文どおりの答え

「3 で割り切れる」を最初に聞く並び

num = 15

最初の条件

3 で
割り切れる?
→ 真

ここで決まる

“3 で
割り切れる”

下の elseif はもう見られません。「3 と5 で割り切れる」かを聞く行に、15 は届きません。

「3 と5 で割り切れる」を最初に聞く並び

num = 15

最初の条件

3 と5 で
割り切れる?
→ 真

ここで決まる

“3 と5 で
割り切れる”

15 は問題文どおり“3 と5 で割り切れる”になります。

上の段で「3」の代わりに「5」を先に聞いても同じで、今度は“5 で割り切れる”で決まります。15 に“3 と5 で割り切れる”を返す道は、「3 と5 で割り切れる」かをいちばん最初に聞くことだけ。だから a = 3 と5 です。

空欄 b と c を決める

〔プログラム〕空欄 b・c の行(上の〔プログラム〕から抜き出した。1字も変えていない)

  elseif (num が  b  で割り切れる)
    result ← " b  で割り切れる"
  elseif (num が  c  で割り切れる)
    result ← " c  で割り切れる"
  else
    result ← "3 でも 5 でも割り切れない"
  endif

※ 上の〔プログラム〕からの抜粋です(1字も変えていません)。

ここへ来るのは、a の条件が偽だった数だけです。つまり 3 と5 の両方では割り切れない数。

その数が 3 で割り切れるなら、5 では割り切れないことがもう決まっています。問題文の「3 で割り切れて5 で割り切れない場合」は、ここでは「3 で割り切れる」と聞くだけで言えるわけです。5 のほうも同じです。

だから b = 3、c = 5。どちらも割り切れない数(たとえば 7)は、両方偽で else へ落ち、“3 でも 5 でも割り切れない”になります。

解答群を見る

a = 3 と5、b = 3、c = 5。解答群でこの組は ウ ひとつだけです。a が「3 と5」なのも ウ だけなので、a が決まった時点で答えは1つに絞れていました。

答え合わせ ── 入れて動かすと、4通りとも正しく返る

空欄に ウ を入れて動かします。

1行ずつ追う 正解の ウ(a = 3 と5/b = 3/c = 5)

出典:科目B サンプル問題 問2(空欄に ウ を入れたもの)


ループ開始前

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

正解は ウ

a = 3 と5、b = 3、c = 5。両方で割り切れるかを最初に聞くから、15 が“3 と5 で割り切れる”に届きます。

ほかの4つは、a が「3」(ア・イ)か「5」(エ・オ)なので、15 がいちばん上で決まってしまいます。9・10・7 はどれを入れても正しく返るので、間違いが出るのは 15 のような両方で割り切れる数だけです。

次に読む

この問題でどこに手間取ったかで、行き先が変わります。

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

Copied title and URL