基本情報技術者試験 (FE) 科目 B — 練習問題 第 14 問 / 全 20 問 · 本番相当
キューと剰余
関連レッスン: 配列 — 添字が 1 から始まる仕様と操作
配列 列 を循環利用するキューである。配列 操作 は 0 なら取出し、それ以外なら その値を追加することを表す。次のプログラムを実行したとき、出力される内容はどれか。
整数型の配列: 列 ← {0, 0, 0}
整数型の配列: 操作 ← {5, 7, 0, 9, 0, 0}
整数型: 先頭 ← 1
整数型: 個数 ← 0
整数型: 取出 ← 0
for (i を 1 から 6 まで 1 ずつ増やす)
if (操作[i] ≠ 0)
列[(先頭 + 個数 - 1) mod 3 + 1] ← 操作[i]
個数 ← 個数 + 1
else
取出 ← 列[先頭]
先頭 ← 先頭 mod 3 + 1
個数 ← 個数 - 1
endif
endfor
print(取出)
print(先頭)
print(個数)解説
正解: ア 9 1 0
(先頭, 個数) を追います。5 を追加 → 列[1] = 5、個数 1。7 を追加 → 列[2] = 7、個数 2。取出し → 取出 = 列[1] = 5、先頭 = 2、個数 1。9 を追加 → 添字は (2 + 1 - 1) mod 3 + 1 = 3 なので 列[3] = 9、個数 2。取出し → 取出 = 列[2] = 7、先頭 = 3、個数 1。最後の取出し → 取出 = 列[3] = 9、先頭 = 3 mod 3 + 1 = 1、個数 0。
先頭 mod 3 + 1 が「3 の次は 1 に戻る」循環を作っています。1 始まりの配列では単純な mod だと 0 が出てしまうため、この「mod してから +1」の形が定石です。実際に最後の取出しで先頭が 3 から 1 に巻き戻っています。
キューは先入れ先出し (FIFO) なので、取り出される順は 5、7、9 と追加した順どおりです。スタック (LIFO) との違いを、同じ操作列で比べて確認しておくと定着します。
1 始まりの循環は「mod してから +1」。最後の取出しで先頭が 3 → 1 に戻る。
演習量を増やしたい方へ(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)