旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2025年度 科目B 公開問題の概要
4の倍数の個数を求めるアルゴリズム
アルゴリズムとプログラミング · 擬似言語 / ループ処理 / 剰余算
引数として正の整数 n と m(m ≧ n + 10)を受け取り、同じ値を返す2つの関数 function1 と function2 がある。function1 は n から m までの範囲にある 4 の倍数の個数を 1 ずつインクリメントして数え上げる。function2 は、最初に n 以上の最小の 4 の倍数を求めて tempN に格納し、その後 4 ずつ増やしながら個数を数え上げる。プログラム中の空欄 a および b に入れる正しい字句の組合せを選べ。
解答・解説を表示
解答
カ
解説
まず要点:4の倍数を数えるときは、最初の4の倍数を探してから4ずつ増やすと間違えにくいです。連続する4つの整数のうち、4で割り切れる数(4の倍数)は必ず1つだけあります。だから最初の4の倍数を見つけた後は、そこから4ずつ足していけば、4の倍数だけを順番に取り出せます。
解き方
- 空欄 a のループでは、tempN がはじめ n で、それが4の倍数でなければ1ずつ増やして最初の4の倍数を探します。n を4で割った余りは0〜3のどれかで、余りが1のときは最大3回増やす必要があるので、a は「iを1から3まで1ずつ増やす」になります。
- 空欄 b のループでは、見つけた最小の4の倍数 tempN から始めて、m 以下の4の倍数を数えます。そのため j を4ずつ増やして数えていけばよく、b は「jをtempNから始めてmを超えない範囲で4ずつ増やす」になります。
- 選択肢 ア不正解
- アの a は最大2回しかくり返さないので、n を4で割った余りが1のとき4の倍数までたどり着けません。b も tempN ずつ増やすため個数を正しく数えられません。
- 選択肢 イ不正解
- a のくり返し回数が足りず、b で1ずつ増やすと4の倍数以外の数まで数えてしまうので誤りです。
- 選択肢 ウ不正解
- b の処理は合っていますが、a が1から2まででは n を4で割った余りが1のとき tempN が4の倍数にならず誤りです。
- 選択肢 エ不正解
- a の回数は合っていますが、b で tempN ずつ増やすと4の倍数を正しく並べられないので誤りです。
- 選択肢 オ不正解
- a の回数は合っていますが、b で1ずつ増やすと tempN から m までの整数を全部数えてしまうので誤りです。
- 選択肢 カ正解
- a は最大3回くり返すので4の倍数を正しく見つけられ、b は tempN から4ずつ増やして4の倍数だけを正確に数えています。
答えの内訳
- a:iを1から3まで1ずつ増やす
- 任意の整数 n に対し、4 の倍数は n, n+1, n+2, n+3 のいずれかに必ず存在します。ループ内で tempN が 4 の倍数になった時点で break するため、最大 3 回の加算で n+3 に到達できるよう、ループは 1 から 3 まで回す必要があります。
- b:jをtempNから始めてmを超えない範囲で4ずつ増やす
- 最初の 4 の倍数 tempN から始まり、m を超えない範囲で 4 ずつ値を増やしながらループを繰り返すことで、m 以下の 4 の倍数の個数を正確に数えることができます。
覚えるポイント
- 任意の周期kの倍数は、連続するk個の整数のなかに必ず1つだけ現れます。
間違えやすいところ
- tempN が最大3回増えることを見落とし、ループの回数を2回だと思い込むこと。
出題の前提:基本情報技術者試験 科目B 公開問題 擬似言語記述形式
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.4 ↗(www.ipa.go.jp) / 公式問題冊子 p.5 ↗(www.ipa.go.jp)
硬貨の組合せ数を求めるループ条件
アルゴリズムとプログラミング · 擬似言語 / while文 / 条件式
関数 change は、10より大きい整数 n を受け取り、1円玉、5円玉、10円玉を使ってちょうど n 円にする組合せの総数を返す。10円玉を 0枚、1枚、2枚… と増やしていき、各場合における残り金額 rest について「5円玉と1円玉でちょうど rest 円にする組合せ数((rest ÷ 5 の商) + 1)」を足し合わせていく。プログラム中の while 文の条件式に入れる正しい式を選べ。
解答・解説を表示
解答
ア
解説
まず要点:残り金額が0円でも「硬貨を1枚も使わない」という1通りの組み合わせ方があります。だから条件には rest = 0 も含める必要があります。rest が0のときに数えるのをやめると、その1通りが抜けて総数が合わなくなります。
解き方
- 10円玉を k 枚使ったときの残り金額は rest = n - 10k です。rest が0以上なら、その rest 円を5円玉と1円玉で作る組合せは (rest ÷ 5 の商) + 1 通りあります。
- たとえば n = 10 で10円玉を1枚使うと rest = 0 となり、組合せは (0 ÷ 5 の商) + 1 = 1 通り(全部0枚)あります。つまり rest = 0 でもループを回す必要があり、条件は「rest ≧ 0」になります。
- 選択肢 ア正解
- rest が0のときも、5円玉0枚・1円玉0枚という1通りを正しく足せるので適切です。
- 選択肢 イ不正解
- rest が0から4のときループが終わってしまい、その1通りが足されないので誤りです。
- 選択肢 ウ不正解
- rest が0から9のときループが止まり、10円玉を最大まで使ったときの組合せが数えられないので誤りです。
- 選択肢 エ不正解
- rest がちょうど0のときの1通りを足せずにループを抜けてしまうので誤りです。
- 選択肢 オ不正解
- rest が5以下のときに処理されないため、多くの組合せが数えられず誤りです。
- 選択肢 カ不正解
- rest が10以下のときに終わってしまい、10円玉を多く使う組合せが反映されないので誤りです。
覚えるポイント
- 金額が0円であっても「0枚使う」という1通りの選択肢が存在します。
間違えやすいところ
- 0円では硬貨を使えないと考えて rest > 0 を選んでしまう誤り。
出題の前提:基本情報技術者試験 科目B 公開問題 擬似言語記述形式
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.6 ↗(www.ipa.go.jp)
配列によるスタックの実装
アルゴリズムとプログラミング · データ構造 / スタック / 配列操作
大域の配列 stack(要素数4、添字は1から開始)と、次に値を格納する位置を示す大域変数 stackPos を用いてスタックを実装する。push 関数および pop 関数を正しく機能させるための空欄 a および b に入れる字句の組合せを選べ。
解答・解説を表示
解答
イ
解説
まず要点:ポインタ変数が「最新データの位置」を指すのか「次に入れる空き位置」を指すのかをはっきりさせて操作することが大切です。今回は stackPos が「次に値を入れる位置」なので、push では今の位置に書き込んでから1つ進め、pop では1つ戻してから取り出します。
解き方
- 問題文より stackPos は「次に値を入れる位置」を指します。だから push では stack[stackPos] に値を入れ、その後に stackPos を1増やします。よって a は stackPos です。
- pop のとき、stackPos が指す場所にはまだ値がありません。最新のデータは1つ手前の stackPos - 1 にあるので、まず stackPos を stackPos - 1 に直してから値を取り出します。よって b は stackPos - 1 です。
- 選択肢 ア不正解
- pop のときに stackPos を増やすと、まだ値のない場所を見てしまい正しく取り出せないので誤りです。
- 選択肢 イ正解
- push では今の位置 stackPos に書き込み、pop では1つ手前の stackPos - 1 に戻して取り出すので正しいです。
- 選択肢 ウ不正解
- push で stackPos - 1 に書くと最新データを上書きしてしまい、pop も逆向きに進むので誤りです。
- 選択肢 エ不正解
- b の動きは合っていますが、a で stackPos - 1 を指定すると最新データを上書きしてしまうので誤りです。
答えの内訳
- a:stackPos
- stackPos は問題文より「次に値を格納する位置」を示す変数であるため、push では現在指している位置である stack[stackPos] にデータを格納します。
- b:stackPos - 1
- pop を行う時点では stackPos は空き位置を指しているため、直前に格納された最上位要素の位置は stackPos - 1 です。ポインタを1減らして該当要素を取り出します。
覚えるポイント
- スタックポインタが「空き位置」を指す場合、プッシュ時は「格納後に加算」、ポップ時は「減算後に取得」となります。
間違えやすいところ
- stackPos が最新データそのものを指していると勘違いし、push で先に増やしてしまうこと。
出題の前提:基本情報技術者試験 科目B 公開問題 擬似言語記述形式
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
文字列探索(力まかせ法)の比較回数
アルゴリズムとプログラミング · 文字列探索 / トレース / 二重ループ
配列 data = {"a", "b", "a", "b", "c", "a", "b", "c"} から、配列 key = {"a", "b", "c"} と一致する部分の先頭インデックスを探索する関数 search がある。この関数を呼び出したとき、/*** β ***/ の行の条件式「data[i + j - 1] が key[j] と等しい」が真と評価される回数を求めよ。
解答・解説を表示
解答
ク
解説
まず要点:文字列を探すときは、先頭から1文字ずつ比べ、合わない文字が出たらそこで止めて次の開始位置に移ります。合った回数は「1か所ごとに、失敗するまでに一致した文字数」を全部足したものです。だから完全に一致した場所だけでなく、途中で失敗した分の一致も数え忘れてはいけません。
解き方
- lenData = 8、lenKey = 3 なので、外側のループ i は 1 から 8 - 3 + 1 = 6 まで動きます。
- 各 i で key[j] と比べた結果を順に追います。i=1では data[1]='a'(真)、data[2]='b'(真)、data[3]='a'≠key[3]='c'(偽)で2回真。i=2は data[2]='b'≠key[1]='a'(偽)で0回。i=3は 'a','b','c' がすべて一致し3回真。i=4は 'b'≠'a' で0回。i=5は 'c'≠'a' で0回。i=6は 'a','b','c' が一致し3回真です。
- 真になった回数を合計すると 2 + 0 + 3 + 0 + 0 + 3 = 8 回になります。
- 選択肢 ア不正解
- 完全一致する場所が2か所(各3回で計6回)以上あるので、1回は誤りです。
- 選択肢 イ不正解
- 2は完全一致した場所の数であり、条件が真になった回数ではないので誤りです。
- 選択肢 ウ不正解
- key の長さ3と混同していますが、条件が真になった合計回数とは別物なので誤りです。
- 選択肢 エ不正解
- 数えた合計8回より明らかに少ないので誤りです。
- 選択肢 オ不正解
- 数えた合計8回と合わないので誤りです。
- 選択肢 カ不正解
- 完全一致した2か所だけ(3回×2=6回)を数え、i=1での2回を見落としているので誤りです。
- 選択肢 キ不正解
- 数えた合計8回と合わないので誤りです。
- 選択肢 ク正解
- i=1で2回、i=3で3回、i=6で3回の合わせて8回が真になるので正しいです。
- 選択肢 ケ不正解
- 合わない比較まで数えてしまい、回数が多くなりすぎているので誤りです。
- 選択肢 コ不正解
- 全比較回数(真8回+偽4回=12回)と混同しているので誤りです。
覚えるポイント
- 部分一致で途中で不一致になった場合でも、そこまでに一致した文字の比較は「真」としてカウントされます。
間違えやすいところ
- 完全一致した場所の文字数だけを足し、i=1で途中まで合った2回を足し忘れること。
出題の前提:基本情報技術者試験 科目B 公開問題 擬似言語記述形式
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.10 ↗(www.ipa.go.jp)
二次元配列による理論度数の計算
アルゴリズムとプログラミング · 二次元配列 / 理論度数 / クロス集計表
予防接種の有無と病気Xへの罹患有無に関するクロス集計表(表1)から、理論度数を計算するプログラムがある。理論度数は「(該当行の合計 × 該当列の合計) ÷ 全体合計」によって計算される。表1のデータを与えたとき、表2の空欄 a(予防接種を受けた・かからなかった)および b(予防接種を受けていない・かかった)に当てはまる値の組合せを選べ。
解答・解説を表示
解答
オ
解説
まず要点:理論度数(期待度数)は、その行の合計とその列の合計をかけ、全体の合計で割って求めます。これは「2つの出来事が関係ないと仮定したとき、それぞれのマスに何人くると期待されるか」を表します。実際に観測した度数とは別の、計算で求める値である点に注意します。
解き方
- 表1から行と列の合計、全体の合計 t を求めます。行1(受けた)は 82 + 6 = 88、行2(受けていない)は 58 + 8 = 66、列1(かからなかった)は 82 + 58 = 140、列2(かかった)は 6 + 8 = 14、全体は 88 + 66 = 154 です。
- 空欄 a(行1・列1)は a = (88 × 140) ÷ 154 = 88 × (10 / 11) = 80 になります。
- 空欄 b(行2・列2)は b = (66 × 14) ÷ 154 = 66 × (1 / 11) = 6 になります。
- 選択肢 ア不正解
- アは a=44、b=33 ですが、正しい値は a=80、b=6 なので合いません。
- 選択肢 イ不正解
- イは表1の観測度数のままを答えており、計算で求める理論度数になっていないので誤りです。
- 選択肢 ウ不正解
- ウは a=70、b=7 ですが、正しい値は a=80、b=6 なので合いません。
- 選択肢 エ不正解
- エは a=75、b=2 ですが、正しい値は a=80、b=6 なので合いません。
- 選択肢 オ正解
- a = 88 × 140 ÷ 154 = 80、b = 66 × 14 ÷ 154 = 6 と正しく計算できているので正しいです。
- 選択肢 カ不正解
- a は合っていますが、b が6ではなく8になっているので誤りです。
- 選択肢 キ不正解
- b は合っていますが、a に観測値の82をそのまま使っているので誤りです。
答えの内訳
- a:80
- 行1(予防接種を受けた)の和は 82 + 6 = 88、列1(かからなかった)の和は 82 + 58 = 140、全体合計 t = 154 です。a = 88 × 140 ÷ 154 = 80 と求まります。
- b:6
- 行2(予防接種を受けていない)の和は 58 + 8 = 66、列2(かかった)の和は 6 + 8 = 14 です。b = 66 × 14 ÷ 154 = 6 と求まります。
覚えるポイント
- クロス集計表の期待度数 = (行の合計 × 列の合計) ÷ 全体の合計
間違えやすいところ
- 実際に観測した度数と、計算で求める理論度数を混同してしまうこと。
出題の前提:基本情報技術者試験 科目B 公開問題 擬似言語記述形式
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp)
バックアップ運用とRPO・RTO・ISMS管理策
情報セキュリティ · RPO / RTO / バックアップ / ISMS
電子機器メーカーA社におけるファイルサーバのバックアップ運用について、表2の空欄 a1〜a3 に入る適切な字句の組合せを選べ。 【運用条件】 ・土曜午前2時にフルバックアップ、翌週火曜と木曜の午前2時に増分バックアップを取得 ・RPO(目標復旧時点)は72時間、RTO(目標復旧時間)は120時間 ・フルバックアップからのリストアには4時間、増分1回につき0.25時間掛かる ・CISOを中心に情報セキュリティを推進 【回答文】 1. 例えば、金曜日の正午に障害が発生した場合、少なくとも[ a1 ]の時点のデータは復元しなければならない。 2. 例えば、木曜日の正午に障害が発生し、全データが消失したとすると、リストアには[ a2 ]時間掛かると予想される。 3. ICT継続の計画書は、[ a3 ]が承認している。
解答・解説を表示
解答
ク
解説
まず要点:RPO(目標復旧時点)は「どこまで古いデータまでなら失ってよいか」を表す時間、RTO(目標復旧時間)は「復旧にかけてよい時間」を表します。たとえば障害が起きた時刻からRPO分だけ過去にさかのぼった時点のデータは、復元できる必要があります。RTOは、バックアップを戻すのにかかる時間がその範囲に収まっているかを見る基準です。
解き方
- a1 を考えます。金曜正午から RPO の72時間前を逆算すると 72 ÷ 24 = 3 日前なので「火曜日の正午」になります。
- a2 を考えます。木曜正午に全データが消えた場合、直前の土曜午前2時のフルバックアップ(4時間)を戻した後、火曜午前2時(0.25時間)と木曜午前2時(0.25時間)の増分を順に適用します。合計は 4 + 0.25 + 0.25 = 4.50 時間です。
- a3 を考えます。本文に「CISOを中心に情報セキュリティに取り組み」とあるので、ICT継続計画を承認するのは CISO です。監査部門は独立しているため承認者にはならず、現場の担当者も承認者ではありません。
- 選択肢 ア不正解
- a1 が月曜日(96時間前)で RPO の72時間を超えており、a2 でも木曜日の増分が抜けているので誤りです。
- 選択肢 イ不正解
- a1、a2、a3 のどれも当てはまっておらず誤りです。
- 選択肢 ウ不正解
- 監査をする内部監査室長は計画書の承認をしないので、a3 が誤りです。
- 選択肢 エ不正解
- a2 と a3 は合っていますが、a1 が月曜日正午(96時間前)で RPO の72時間を満たさないので誤りです。
- 選択肢 オ不正解
- a1 の日時の求め方と、a3 の承認する人がどちらも合っていないので誤りです。
- 選択肢 カ不正解
- a1 は合っていますが、a2 で木曜日の増分を足しておらず、a3 の承認者も合っていないので誤りです。
- 選択肢 キ不正解
- a1 は合っていますが、a2 の復旧時間が足りず、内部監査室長は承認者ではないので誤りです。
- 選択肢 ク正解
- a1 は火曜日の正午、a2 は4.50時間、a3 は CISO となり、すべて条件に合っているので正しいです。
- 選択肢 ケ不正解
- a1 と a2 は合っていますが、計画書を承認できるのは担当者ではなく CISO なので誤りです。
- 選択肢 コ不正解
- a1 と a2 は合っていますが、内部監査室長は監査を担当する立場で承認者ではないので誤りです。
答えの内訳
- a1:火曜日の正午
- 目標復旧時点(RPO)が72時間と定められているため、金曜日の正午から72時間(3日間)前の時点である「火曜日の正午」以降のデータ復元が要求されます。
- a2:4.50
- 木曜日正午時点の復元には、直前の土曜日のフルバックアップ(4時間)に加え、火曜日と木曜日の午前2時の増分バックアップ(各0.25時間)を適用するため、4 + 0.25 × 2 = 4.50時間掛かります。
- a3:CISO
- 全社的な情報セキュリティおよびICT継続に関する計画書は、最高情報セキュリティ責任者であるCISOが承認するのが適切です。
関連する分野を学ぶ
覚えるポイント
- 増分バックアップの復元は「直前のフル + それ以降の全増分」を順番に適用します。
間違えやすいところ
- 木曜正午の障害で、木曜未明(午前2時)の最新の増分バックアップを戻す対象に入れ忘れること。
出題の前提:JIS Q 27001:2023(ISO/IEC 27001:2022)情報セキュリティ管理策
出典:IPA『2025年度 科目B 公開問題』
公式問題冊子 p.14 ↗(www.ipa.go.jp) / 公式問題冊子 p.15 ↗(www.ipa.go.jp)
2025年度 科目B 公開問題
参照した公式資料
IPAが公開した2025年度 科目B 公開問題の問題・解答資料です。

