科目B

令和7年度 基本情報技術者試験 科目B 公開問題 問1

次のプログラム中のaとbに入れる正しい答えの組合せを,解答群の中から選べ。 関数 function1 が受け取る引数と,関数 function2 が受け取る引数とが同じとき,二つの関数は同じ値を返す。ここで,引数 n と引数 m は正の整数であり,引数 m は引数 n よりも 10 以上大きい数とする。 〔プログラム〕
○整数型: function1(整数型: n, 整数型: m)
  整数型: count ← 0
  整数型: i
  for (iをnからmまで1ずつ増やす)
    if ((i mod 4)が0と等しい)
      count ← count + 1
    endif
  endfor
  return count

○整数型: function2(整数型: n, 整数型: m)
  整数型: count ← 0
  整数型: tempN ← n
  整数型: i, j
  for (a)
    if ((tempN mod 4)が0と等しい)
      繰返し処理を終了する
    endif
    tempN ← tempN + 1
  endfor

  for (b)
    count ← count + 1
  endfor
  return count
答えを選ぶ

出典:令和7年度 基本情報技術者試験 科目B 公開問題 問1(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:カ

覚える知識

剰余(mod)による倍数の個数の数え上げ

区間の中の k の倍数を数えるには、最初の k の倍数まで進めてから k ずつ数えればよい。最初の倍数に届くまでには最大 k−1 回増やす必要がある。

この問題で必要なこと

function1 は n〜m の中にある 4 の倍数の個数を数える。function2 は、最初の for で tempN を n 以上で最初の 4 の倍数まで進め、次の for で 4 ずつ数えればよい。n mod 4 = 1 のときは n, n+1, n+2 で 3 回増やして初めて n+3 に届くので、最初の繰返しには 3 回必要になる。a は「1 から 3 まで」、b は「tempN から始めて m を超えない範囲で 4 ずつ増やす」となり、正解はカ。

ひっかけ

a の繰返しを 2 回にすると、n mod 4 = 1 のとき tempN が n+2 で止まり、4 の倍数に届かない(回数の ±1 の思い違い)。b を 1 ずつにすると全ての数を数えてしまう。tempN ずつ増やすと増分が 4 ではなくなる。