2026年版・1-8

アルゴリズムとプログラミング演習(トレースと計算量)の一問一答

基本情報技術者試験 科目A「基礎理論」から、アルゴリズムとプログラミング演習(トレースと計算量)に関する4択問題を10問。「答えと解説を見る」を開くと、正解とその理由がその場で読めます。会員登録は不要です。

この分野の演習

全10問/解説つき・基本無料

アプリ形式で解く(全600問) 基礎理論の要点解説を読む
問題

上から順に解いてみてください。答えは各問の下で確認できます。科目Aの本試験と同じく、4択で出題しています。

問11-8

次の手続を実行した後の変数xの値はいくらか。ここで、mod は割り算の余りを求める演算子である。
x ← 0 i を 1 から 10 まで 1 ずつ増やしながら、次を繰り返す もし i mod 3 = 0 ならば x ← x + i 繰返しの終わり

  • ①9
  • ②18
  • ③30
  • ④55
答えと解説を見る
正解 ②18
解説
i mod 3 = 0 は「iが3で割り切れる」という条件です。iが1から10まで変わる間に、この条件を満たすのは i=3、6、9 の3回だけです。
i=3:x = 0 + 3 = 3
i=6:x = 3 + 6 = 9
i=9:x = 9 + 9 = 18
したがって、繰返しが終わった後のxは18です。

他の選択肢が不適切な理由
・9:「x ← x + i」を「x ← i」と読み、最後に条件を満たした i=9 だけが残るとした誤りです。
・30:繰返しの範囲を12までと読み、12も加えた値(3+6+9+12)です。
・55:条件を無視して、1から10までを全て加えた値です。

覚え方のポイント
条件付きの繰返しは、「条件を満たすときだけ処理が動く」ことに注意して、変数の値を1回ずつ表に書き出して追うのが確実です。
問21-8

要素番号1〜10の配列に、昇順に並んだ値 2、5、8、12、16、23、38、56、72、91 が格納されている。次の方法で23を探すとき、23と一致するまでに配列の要素と比較する回数は何回か。
low ← 1、high ← 10 mid ← (low + high) ÷ 2(小数点以下切捨て)の要素と比べる 探す値の方が大きければ low ← mid + 1、小さければ high ← mid - 1 として繰り返す

  • ①3回
  • ②2回
  • ③4回
  • ④6回
答えと解説を見る
正解 ①3回
解説
2分探索法の動きを1回ずつ追います。
1回目:low=1、high=10、mid=(1+10)÷2=5 → 5番目は16。23の方が大きいので low=6
2回目:low=6、high=10、mid=(6+10)÷2=8 → 8番目は56。23の方が小さいので high=7
3回目:low=6、high=7、mid=(6+7)÷2=6 → 6番目は23で一致
したがって、比較は3回です。

他の選択肢が不適切な理由
・2回:2回目の比較(56)で見つかったと誤った値です。
・4回:10件のデータに対する2分探索の最大比較回数([log₂10]+1=4)で、今回の探索の回数ではありません。
・6回:先頭から順に比べる線形探索の場合の回数です(23は6番目)。

覚え方のポイント
2分探索のトレースは、low・high・mid の3つの値を表にして1回ずつ更新すると、間違えずに追えます。
問31-8

4つの数値 5、3、4、1 を、隣り合う2つを比較して左の方が大きければ交換する操作を左端から右端まで繰り返すバブルソートで、昇順に並べ替える。並べ替えが終わるまでに行われる交換の回数は全部で何回か。

  • ①5回
  • ②4回
  • ③6回
  • ④3回
答えと解説を見る
正解 ①5回
解説
1回の走査ごとに、交換の様子を追います。
1回目の走査:5と3を交換 → 3、5、4、1/5と4を交換 → 3、4、5、1/5と1を交換 → 3、4、1、5(交換3回)
2回目の走査:3と4はそのまま/4と1を交換 → 3、1、4、5(交換1回)
3回目の走査:3と1を交換 → 1、3、4、5(交換1回)
合計は 3+1+1=5回です。これは、並びの中で「大小が逆になっている組」の数(5と3、5と4、5と1、3と1、4と1)と一致します。

他の選択肢が不適切な理由
・3回:1回目の走査での交換回数だけを数えた値です。
・4回:2回目の走査までの交換回数(3+1)で、3回目の走査を数え忘れています。
・6回:4個のデータで起こりうる交換回数の最大値(4×3÷2)で、完全に逆順のときの回数です。

覚え方のポイント
バブルソートの交換回数は「逆順になっている組の数」と同じです。組を数えると、走査を追わなくても確かめ算ができます。
問41-8

関数 f(n) を次のように定義する。f(1234) の値はいくらか。ここで、div は整数の割り算の商、mod は余りを求める演算子である。
f(n):n = 0 のとき 0 を返す それ以外のとき (n mod 10) + f(n div 10) を返す

  • ①1234
  • ②4
  • ③24
  • ④10
答えと解説を見る
正解 ④10
解説
n mod 10 は一の位の数字、n div 10 は一の位を取り除いた数です。定義に従って展開します。
f(1234) = 4 + f(123)
f(123) = 3 + f(12)
f(12) = 2 + f(1)
f(1) = 1 + f(0)、f(0) = 0
下から戻すと、f(1)=1、f(12)=3、f(123)=6、f(1234)=10 です。この関数は、各桁の数字の和を求めています。

他の選択肢が不適切な理由
・4:最初の一の位(1234 mod 10)だけを答え、f(123) 以降の値を足していない誤りです。
・24:各桁の数字の積(1×2×3×4)で、和と積を取り違えています。
・1234:処理を行わずに引数をそのまま答えた誤りです。

覚え方のポイント
「mod 10 で一の位を取り出し、div 10 で一の位を捨てる」は、桁ごとの処理の定番の組合せです。
問51-8

計算量が O(n²) のアルゴリズムで、1,000件のデータの処理に1秒かかった。同じアルゴリズムで3,000件のデータを処理するとき、処理時間はおよそ何秒か。

  • ①約3秒
  • ②約6秒
  • ③約9秒
  • ④約27秒
答えと解説を見る
正解 ③約9秒
解説
O(n²) は、処理時間がデータ件数の2乗に比例することを表します。件数が 3,000 ÷ 1,000 = 3倍 になると、処理時間は 3² = 9倍 になります。
1秒 × 9 = 約9秒

他の選択肢が不適切な理由
・約3秒:処理時間が件数に比例する O(n) のアルゴリズムの場合の値です。
・約6秒:3倍を2倍した値(3×2)で、2乗の計算を誤っています。
・約27秒:件数の3乗に比例する O(n³) の場合の値です。

覚え方のポイント
「O(n)なら件数の倍率そのまま、O(n²)なら倍率の2乗、O(log n)ならほとんど増えない」。件数が何倍になったかを先に求めてから、オーダーに当てはめましょう。
問61-8

逆ポーランド記法(後置記法)で書かれた式「3 4 + 2 × 5 -」を、スタックを使って左から順に計算した結果はいくらか。

  • ①6
  • ②9
  • ③19
  • ④-21
答えと解説を見る
正解 ②9
解説
数値はスタックに積み、演算子が来たら上から2つ取り出して計算し、結果を積み直します。
3、4を積む → +:3+4=7 を積む
2を積む → ×:7×2=14 を積む
5を積む → -:14-5=9 を積む
最後にスタックに残った9が計算結果です。中置記法に直すと(3+4)×2-5 です。

他の選択肢が不適切な理由
・6:3+4×2-5 のように、乗算を先に計算する普通の式として読んだ値です。
・19:最後の演算を引き算ではなく足し算(14+5)にした誤りです。
・-21:(3+4)×(2-5)のように、2と5の引き算を先に行った値です。

覚え方のポイント
逆ポーランド記法は「演算子が来たら、直前の2つで計算する」だけです。スタックの中身を横に書き出していくと、確実に計算できます。
問71-8

要素番号0〜7の8個の要素を持つ配列を環状に使ってキュー(待ち行列)を実現している。先頭の要素の位置が6、次に要素を格納する位置が2であるとき、キューに入っている要素の数はいくつか。要素は6、7、0、1…の順に環状につながっているものとする。

  • ①2個
  • ②4個
  • ③3個
  • ④5個
答えと解説を見る
正解 ②4個
解説
環状のキュー(リングバッファ)では、配列の最後(7)の次は先頭(0)に戻ります。先頭の位置6から、次に格納する位置2の手前までが、要素が入っている位置です。
6、7、0、1 の4か所 → 4個
計算で求めると、(次に格納する位置 - 先頭の位置 + 要素数)mod 要素数 =(2 - 6 + 8)mod 8 = 4 です。

他の選択肢が不適切な理由
・2個:次に格納する位置の値(2)を、そのまま要素の数と取り違えた誤りです。
・3個:位置1を数え忘れた値です。
・5個:次に格納する位置2まで数えた値です。位置2はまだ空いている場所です。

覚え方のポイント
環状のキューでは「末尾の次は先頭に戻る」。位置を円の形に書いて数えると、取り違えを防げます。
問81-8

要素番号0〜6のハッシュ表に、キーを7で割った余りを格納位置とするハッシュ関数を使い、15、22、8 の順にキーを格納する。格納位置が既に使われている場合は、1つ後ろの位置(6の次は0)を順に調べて、空いている位置に格納する。キー8が格納される位置はどれか。

  • ①位置3
  • ②位置2
  • ③位置1
  • ④位置4
答えと解説を見る
正解 ①位置3
解説
各キーを7で割った余りと、実際の格納位置を順に求めます。
15:15 mod 7 = 1 → 位置1は空いているので位置1
22:22 mod 7 = 1 → 位置1は使用中(衝突)→ 次の位置2に格納
8:8 mod 7 = 1 → 位置1、位置2とも使用中 → 次の位置3に格納
したがって、キー8は位置3に格納されます。このように、衝突したら次の空き位置を順に探す方法を、オープンアドレス法(線形探査法)といいます。

他の選択肢が不適切な理由
・位置1:ハッシュ値そのものの位置で、既に15が格納されています。
・位置2:22が先に格納されているため、空いていません。
・位置4:位置3が空いているので、そこまで進む必要はありません。

覚え方のポイント
ハッシュ法の問題は、キーを格納する順番どおりに、表を書いて1つずつ埋めていくのが確実です。
問91-8

2次元配列 A の要素 A[i][j](i=1〜5、j=1〜8)が、行ごとに連続して主記憶に格納されている(行優先)。1要素は4バイトで、A[1][1] の先頭アドレスが1000番地のとき、A[3][5] の先頭アドレスは何番地か。

  • ①1112番地
  • ②1084番地
  • ③1088番地
  • ④1080番地
答えと解説を見る
正解 ④1080番地
解説
行優先では、1行目の8要素、2行目の8要素…の順に並びます。A[3][5] の前には、1行目と2行目の全要素(2×8=16個)と、3行目の A[3][1]〜A[3][4] の4個があります。
前にある要素の数:(3-1)×8 +(5-1)= 16 + 4 = 20個
先頭アドレス:1000 + 20 × 4 = 1080番地

他の選択肢が不適切な理由
・1084番地:列の添字から1を引き忘れた値((2×8+5)×4=84)です。
・1088番地:列ごとに格納する列優先で計算した値((4×5+2)×4=88)です。
・1112番地:行の添字から1を引き忘れた値((3×8+4)×4=112)です。

覚え方のポイント
「前に何個の要素があるか」を数え、要素の大きさを掛けて先頭アドレスに足します。添字が1から始まるときは、それぞれ1を引くのを忘れないようにしましょう。
問101-8

次の手続でユークリッドの互除法を実行する。a=105、b=45 から始めたとき、手続が終わった時点のaの値はいくらか。
b ≠ 0 である間、次を繰り返す r ← a mod b a ← b b ← r 繰返しの終わり

  • ①3
  • ②5
  • ③15
  • ④45
答えと解説を見る
正解 ③15
解説
ユークリッドの互除法は、「割られる数を割る数で割った余り」で置き換えることを、余りが0になるまで繰り返して最大公約数を求める方法です。
1回目:r = 105 mod 45 = 15 → a=45、b=15
2回目:r = 45 mod 15 = 0 → a=15、b=0
b=0 になったので終了し、aの値15が105と45の最大公約数です。

他の選択肢が不適切な理由
・3、5:どちらも105と45の公約数ですが、最大の公約数ではありません。互除法の結果は最大公約数の15です。
・45:1回目の繰返しの後のaの値で、繰返しを途中で止めた誤りです。

覚え方のポイント
互除法は「余りが0になった時点の、割る数(ここでは代入後のa)」が最大公約数です。a・b・rの値を表にして追いましょう。

基本情報技術者(科目A)の対策問題(全600問)に戻る

非公式の資格試験対策サイトです。独立行政法人情報処理推進機構(IPA)とは一切関係ありません。

※本ページでは、アクセス解析(Googleアナリティクス)と、広告の配信・成果の計測(A8.net)のためにCookie等を利用し、閲覧に関する情報をGoogle LLC・株式会社ファンコミュニケーションズへ送信しています。詳しくはプライバシーポリシーをご覧ください。

※本ページの問題・解説は、生成AI(人工知能)を活用して作成しています。

【PR】