科目B・擬似言語

科目Bを、読める順番で練習する

科目Bはアルゴリズム(擬似言語)と情報セキュリティで構成され、独自記法の擬似言語に慣れているかどうかが結果を分けます。 ここでは360問のオリジナル練習問題を、解説つきで1問ずつ確認できます。

擬似言語を読む3つの要点

  1. 変数の表を書く — 頭の中で追わず、ループ1周ごとに各変数の値を書き出す(トレース)。速さは後からついてきます。
  2. 境界だけ疑う — ループの開始・終了、配列の端、条件の等号。擬似言語の設問はほぼここで差がつきます。
  3. 毎日数問、短く — 長文を週末にまとめて読むより、短い問題を毎日トレースするほうが記法に慣れます。

アルゴリズムとプログラミング60問

配列/ループ次の擬似言語で表される手続 sumOdd を、引数として要素数 5 の整数型の配列 {12, 125, 1008, 231, 14} を与えて実行したとき、…整列次の擬似言語は、整数型の配列 arr に対して隣接交換を行う手続の一部であり、外側ループの 1 回目(1 パス)に相当する。arr = {25, 13, 3…探索次の擬似言語は昇順に整列された配列 arr に対する二分探索の手続である。arr = {2, 4, 6, 8, 10, 12, 14}(要素数 7、添字は …再帰次の擬似言語で表される再帰手続 f を、引数 n = 20 で呼び出したとき、戻り値として返される値はどれか連結リスト単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。先頭ノード head から順に val を合計…スタック・キュースタックに対する push(積む)と pop(取り出し、取り出した値を返す)を行う。空のスタックに対して次の擬似言語を実行したとき、最後に実行される pop…ビット演算次の擬似言語で、<< は左シフト、AND はビットごとの論理積を表す。整数 x = 200 を与えて実行したとき、戻り値(10 進数)はどれか文字列処理文字型の配列 s には 'a' と 'b' が交互に並んだ全 24 文字(s = {'a','b','a','b','a','b','a','b','a',…ループ次の手続 sumTo は、1 から n までの整数の総和を返すことを意図している。n=10 のとき正しく 55 を返すように空欄 [ a ] に入れる条件式…スタック・キューキューに対する enqueue(末尾に追加)と dequeue(先頭から取り出す)を行う。空のキューに対して次の擬似言語を順に実行したあと、キューの先頭にあ…ループ次の擬似言語はユークリッドの互除法で 2 整数の最大公約数を求める手続である。gcd(840, 360) を実行したとき、戻り値はどれか。mod は剰余を表…ループ次の擬似言語の内側の文「cnt ← cnt + 1」が実行される回数はどれか配列/集計次の擬似言語で表される手続 range は、テストの得点を格納した配列 arr の最高点と最低点の差(得点幅)を返すことを意図している。arr = {37,…配列/集計次の擬似言語で表される手続 average は、得点を格納した配列 arr の平均点を整数で返す。「÷ の商」は整数除算(小数部を切り捨て)を表す。arr …2次元配列3 行 3 列の 2 次元配列 m に次の得点が格納されている(単位は点、添字は行・列とも 1 から)。 m[1][1]=14, m[1][2]=5, m[…配列/操作次の擬似言語で表される手続 reverse は、配列 arr を先頭と末尾から内側へ向けて要素を交換し、配列を反転させる。arr = {18, 47, 23…配列/集計次の手続 countDistinct は、整数型の配列 arr に現れる値の種類数(重複を除いた個数)を返す。すでに前方に同じ値が現れていれば数えない。ar…探索次の手続 countAbove は、整数型の配列 arr のうち、しきい値 t より大きい(t は含まない)要素の個数を返す。arr = {45, 12, …数値演算次の手続 digitSum は、正の整数 n の各桁の数字の和を返す。mod は剰余、「÷ の商」は整数除算を表す。n = 4825 を与えて実行したとき、…数値演算次の手続 toBinary は、正の整数 n を 2 進数の文字列に変換して返す。求めた 2 進数の桁を左から正しく並べた結果になる。mod は剰余、「÷ …数列次の手続 fib は、フィボナッチ数列の第 n 項を反復で求める。数列は第 0 項 = 0、第 1 項 = 1、第 k 項 = 第 (k−1) 項 + 第 …配列/集計次の手続 prefixLast は、得点を格納した配列 arr の累積和を求め、最後の累積値(全要素の合計に等しい値)を返す。acc[i] には arr[1…探索次の手続 argMax は、配列 arr の中で最大値が最初に現れる位置(添字、1 から)を返す。比較は厳密な大なり(>)で行う。arr = {24, 57…2次元配列3 行 3 列の 2 次元配列 m に次の値が格納されている(添字は行・列とも 1 から)。 m[1][1]=5, m[1][2]=9, m[1][3]=4…文字列処理次の擬似言語は、文字型の配列 s が回文(前から読んでも後ろから読んでも同じ)かどうかを調べ、回文なら "true"、そうでなければ "false" を返す…文字列処理次の擬似言語は、文字型の配列 s を走査して文字 'a' を 'o' に置き換え、置き換えた回数を返す手続である。s = {'b','a','n','a',…文字列処理次の擬似言語は、文字型の配列 s の中に長さ 2 の部分文字列「a の次に b」が現れる回数を数える手続である。位置を 1 つずつずらして調べ、重なりも許す…スタック・キュー次の擬似言語は、スタックを用いて文字列中の丸括弧の対応が正しいかを調べ、正しければ "OK"、誤っていれば "NG" を返す手続である。push は積む、p…スタック・キュー次の擬似言語は、逆ポーランド記法(後置記法)の式をスタックで評価する手続である。トークン列を左から処理し、数値なら push、演算子なら上位 2 値を po…キュー整数を格納したキュー(先頭から取り出す FIFO)がある。次の手続は、キューの要素が1個になるまで「先頭の2つを取り出し、その和を末尾に追加する」ことを繰り…文字列処理次の擬似言語は、文字型の配列 s に含まれる母音('a','e','i','o','u' のいずれか)の個数を数える手続である。s = {'e','d','…文字列処理次の擬似言語は、文字型の配列 s を連長圧縮し、連続する同じ文字を「文字+連続数」の 2 文字で表したときの圧縮後の総文字数を返す手続である。例えば 'aa…文字列処理次の擬似言語はシーザー暗号で英小文字を 3 文字後ろへずらす手続である。各文字の 0 起算の番号('a'=0, 'b'=1, …, 'z'=25)に 3 を…文字列処理英小文字の文字コードは 'a'=97, 'b'=98, …, 'z'=122 であり、対応する英大文字は小文字より 32 だけ小さい('A'=65)。次の擬…スタック・キュー次の擬似言語は、スタックを使って文字型の配列 s を逆順にした文字列を返す手続である。まず全文字を順に push し、次に空になるまで pop して連結する…文字列処理次の擬似言語は、文字型の配列 s から連続して重複する文字を 1 つにまとめ(例: 'aabb' → 'ab')、まとめた後の文字数を返す手続である。先頭文…整列次の擬似言語は選択ソートの外側ループ 1 回目(先頭位置 1 を確定させる 1 パス)に相当する。arr = {8, 140, 7, 26, 3}(要素数 …整列次の擬似言語は挿入ソートである。arr = {40, 15, 28, 9, 33}(要素数 5、添字は 1 から)を与えたとき、外側ループ変数 i が 3 …整列次の擬似言語は、ともに昇順整列済みの 2 つの配列 L と R を 1 つの昇順配列にマージする手続である。L = {11, 27, 38}、R = {9,…木構造空の 2 分探索木に対して、50, 30, 70, 20, 60 の順に値を挿入した。次の擬似言語に従ってさらに値 65 を挿入したとき、65 を子としても…連結リスト単方向連結リスト head→[10]→[20]→[30]→NULL がある。各ノードは val と next をもつ。次の擬似言語は、値 target をも…再帰次の擬似言語は再帰によって b の e 乗を求める手続である。power(2, 10) を実行したとき、戻り値はどれか再帰次の擬似言語は、n 枚の円盤を 3 本の杭を使って移す「ハノイの塔」で、1 枚を動かすたびに move を 1 回呼ぶ。hanoi(6, A, C, B) …探索次の擬似言語は昇順配列に対する二分探索である。arr = {3, 7, 11, 15, 19, 23, 27, 31, 35}(要素数 9、添字は 1 から…再帰次の擬似言語は再帰でフィボナッチ数を求める手続である(fib(0)=0, fib(1)=1)。fib(10) を実行したとき、戻り値はどれか配列/ループ次の手続 findMax は、整数型の配列 arr の最大値を返すことを意図している。arr = {18, 42, 7, 33, 29} のとき正しく 42…再帰次の擬似言語は再帰で配列 arr の先頭 n 要素の合計を求める手続である。arr = {7, 12, 5, 20, 6}(要素数 5、添字は 1 から)に…再帰次の擬似言語は、非負整数 n の各桁の数字の和を再帰で求める手続である。mod は剰余、÷ の商は整数除算を表す。digitSum(4825) を実行したと…2次元配列4 行 4 列の 2 次元配列 m に次の値が格納されている(添字は行・列とも 1 から)。 m[1][*]=7,2,9,4 m[2][*]=3,8,1,6…配列/集計次の手続 mode は、整数型の配列 arr の中で最も多く出現する値(最頻値)を返す。arr = {3, 7, 3, 5, 7, 3, 2, 7, 7}(…配列/集計次の手続は、配列 arr に対し窓幅 3 の移動平均(直近 3 要素の平均、小数部は切り捨て)を求め、添字 i の結果を res[i] に格納する。「÷ の…配列/集計次の手続 maxSub は、配列 arr の連続した区間の和のうち最大となる値を返す。arr = {3, -4, 6, -1, 5, -7, 2}(要素数 …配列/集計次の手続 maxGap は、配列 arr の隣り合う 2 要素の差の絶対値のうち最大のものを返す。abs は絶対値を返す。arr = {12, 19, 4,…配列/操作次の手続 rotateRight は、配列 arr の全要素を右へ 1 つずらし、末尾の要素を先頭へ移す(右回転)。arr = {51, 62, 73, 8…配列/集計次の手続 countAtLeast は、配列 arr の中で値が k 以上である要素の個数を返す。arr = {45, 80, 60, 30, 75, 90…2次元配列3 行 3 列の 2 次元配列 m に次の値が格納されている(添字は行・列とも 1 から)。 m[1][*]=4,7,2 m[2][*]=5,1,8 m[3…配列/集計次の手続 passCount は、得点配列 arr のうち合格基準 th 点以上を取った人数を返す。arr = {78, 92, 85, 64, 80, 5…配列/集計次の手続 binCount は、得点配列 arr の各値を 10 点刻みの階級(0〜9 点, 10〜19 点, …, 90〜99 点)に分け、各階級の度数を…2次元配列3 行 3 列の 2 次元配列 m に次の値が格納されている(添字は行・列とも 1 から)。 m[1][*]=12,47,9 m[2][*]=33,8,51…配列/集計次の手続 maxWindow は、配列 arr の連続する 2 要素の和のうち最大となる値を返す。arr = {8, 3, 11, 6, 2, 9}(要素数…
科目Bのトレースを、そのまま画面上で。

登録すると、擬似言語のトレースを1行ずつ画面で追える練習モードと、間違えた問題の解き直しが使えます。科目Aの過去問演習・模試も無料枠で試せます。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

基本情報技術者 科目B対策|擬似言語の読み方と練習問題|ukamiru