科目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 の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:カ
覚える知識
剰余(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 ではなくなる。