科目B・擬似言語
科目Bを、読める順番で練習する(2ページ目)
科目Bはアルゴリズム(擬似言語)と情報セキュリティで構成され、独自記法の擬似言語に慣れているかどうかが結果を分けます。 ここでは360問のオリジナル練習問題を、解説つきで1問ずつ確認できます。 このページは61〜120問目です。
擬似言語を読む3つの要点
- 変数の表を書く — 頭の中で追わず、ループ1周ごとに各変数の値を書き出す(トレース)。速さは後からついてきます。
- 境界だけ疑う — ループの開始・終了、配列の端、条件の等号。擬似言語の設問はほぼここで差がつきます。
- 毎日数問、短く — 長文を週末にまとめて読むより、短い問題を毎日トレースするほうが記法に慣れます。
アルゴリズムとプログラミング60問
探索次の擬似言語は昇順に整列された配列 arr に対する二分探索である。arr = {5, 9, 13, 17, 21, 25, 29, 33, 37, 41,…探索次の手続 linearSearch は、配列 arr を先頭から走査し target と一致する最初の要素を見つけたら直ちに添字を返す。arr = {34,…整列次の擬似言語は選択ソートで配列を昇順に整列する手続である。各外側ループで未整列部分の最小値を探し、その位置と先頭が異なる場合だけ交換する。arr = {5,…整列次の擬似言語は計数ソートの前処理である。値が 1〜5 の整数だけからなる配列 data = {3, 1, 5, 2, 3, 1}(要素数 6)に対し、各値の…整列次の擬似言語は、値が 0 以上 5 以下の整数だけからなる配列 arr の各値の出現回数を数え、集計用配列 cnt(添字 0〜5)に格納する手続である。ar…整列次の擬似言語はシェルソートの一部であり、間隔 gap を 4 として、間隔 gap だけ離れた要素どうしを挿入ソートで整列する 1 段階分の処理である。ar…探索次の手続 minMaxCode は、配列 arr を 1 度だけ走査して最大値 mx と最小値 mn を同時に求め、mx × 100 + mn を返す。ar…探索次の手続 checkOrder は、配列 arr が昇順に整列しているかを調べるため、隣り合う要素で前が後ろより大きい(arr[i] > arr[i+1])…探索次の手続 kthSmallest は、配列 arr を選択ソートと同じ要領で小さい順に k 回だけ確定させ、k 番目に小さい値を返す。arr = {37, …探索次の擬似言語は昇順配列に対する二分探索である。arr = {4, 8, 12, 16, 20, 24, 28, 32, 36}(要素数 9、添字は 1 から…探索次の手続 firstIndex は、配列 arr を先頭から走査し target と最初に一致した要素の添字(1 から)を返す。同じ値が複数あっても最初の …整列次の擬似言語は選択ソートで要素数 7 の配列 arr を昇順に整列する手続である。内側の文「if (arr[j] < arr[minPos])」による比較が…再帰次の擬似言語は最大公約数を求める再帰手続である。gcd(252, 198) を呼び出したとき、戻り値はどれか。mod は剰余を表す再帰次の再帰手続 f に対し、f(5) を最初に 1 回呼び出した。これを含め、手続 f が呼び出される総回数(f が起動された延べ回数)はどれか再帰次の 2 つの手続は互いを呼び出す相互再帰で、整数が偶数か奇数かを判定する。isOdd(7) を呼び出したとき、戻り値はどれか。true は奇数、false…再帰次の再帰手続 prod は、配列 arr の添字 i 番目から末尾までの要素の積を返す。arr = {2, 5, 3, 4}(要素数 4、添字は 1 から)…再帰文字型の配列 s に対し、関数 tail(s) は先頭を除いた残りの配列、isEmpty(s) は空配列のとき true を返す。次の再帰手続 length…再帰次の再帰手続 toBin は、非負整数 n を 2 進数の文字列として組み立てて返す。「÷ の商」は整数除算を表し、& は文字列連結を表す。toBin(13…再帰二分木の各ノードは left(左の子)と right(右の子)への参照をもち、子がなければ NULL である。根 A の左の子が B、右の子が C、B の左…再帰次の再帰手続 comb は組合せの数 C(n, r) を求める。パスカルの関係 C(n,r)=C(n−1,r−1)+C(n−1,r) と境界条件を用いる。c…再帰次の再帰手続 sumAcc は、引数 acc に途中結果を蓄積しながら 1 から n までの総和を求める末尾再帰である。sumAcc(4, 0) を呼び出し…再帰次の再帰手続 maxFrom は、配列 arr の添字 i 番目から末尾までの最大値を返す。max(x, y) は x と y の大きい方を返す関数である。…再帰単方向連結リストの各ノードはメンバ val と next(次ノードへの参照。なければ NULL)をもつ。次の再帰手続 count はノード数を数える。hea…再帰次の再帰手続 f は n を 3 ずつ減らしながら呼び出される。f(11) を呼び出したとき、同時にスタック上に積まれる f のフレーム数の最大値(再帰の深…文字列処理文字型の配列 s の中で、長さ 2 のパターン pat(pat[1], pat[2])が最初に連続して現れる先頭の添字を返し、見つからなければ 0 を返す次…文字列処理文字型の配列 s 中の文字 old を文字 new に置き換え、置き換えた回数を返す次の手続に、s = {'a','x','a','x','x','a','…文字列処理区切り文字 ' '(空白)で区切られた文字列をトークン(単語)に分割したとき、トークンの個数を返す次の手続に、s = {'a','b',' ','c',' …文字列処理数字文字('0'〜'9')だけからなる文字型の配列 s を整数値に変換する次の手続に、s = {'2','0','5','3'}(要素数 4、添字は 1 か…文字列処理文字型の配列 s 中の英小文字('a'〜'z')を大文字に変換し、変換した文字数を返す次の手続に、s = {'A','b','3','c','D','e'}…文字列処理文字型の配列 s 中で同じ文字が連続する最長の長さを返す次の手続に、s = {'a','a','b','b','b','c','a','a'}(要素数 8、…文字列処理文字型の配列 s 中に含まれる数字文字('0'〜'9')の個数を返す次の手続に、s = {'a','1','b','2','c','3','d','4'}(…文字列処理2 つの文字型配列 a, b(ともに英小文字、要素数は等しい)が互いに並べ替えで一致するか(アナグラムか)を判定する次の手続に、a = {'l','i','…文字列処理2 つの文字型配列 a, b を辞書順で比較し、a が b より小さければ -1、大きければ 1、等しければ 0 を返す次の手続に、a = {'c','a'…文字列処理文字型の配列 s から、開始位置 from から長さ len 個の文字を取り出して新しい配列 r を作る次の手続に、s = {'p','r','o','g'…文字列処理2 つの文字型配列 a, b の先頭から一致が続く文字数(共通接頭辞の長さ)を返す次の手続に、a = {'f','l','o','w','e','r'}(要…文字列処理文字型の配列 s の中に、長さ 2 のパターン p(p[1], p[2])が出現する回数(位置が重なる出現も別々に数える)を返す次の手続に、s = {'a'…スタック・キュー次の擬似言語は、演算子 + と × だけからなる中置記法の式を、スタックを用いて後置記法(逆ポーランド記法)に変換する手続である。演算子の優先順位は × が…スタック・キュー次の擬似言語は、丸括弧 ( ) と角括弧 [ ] が混在した文字列の対応が正しく取れているかをスタックで判定する手続である。開き括弧は push し、閉じ括…スタック・キュー1, 2, 3, 4 をこの順に push できるスタックがある。push と pop は任意の順序で混在してよいが、push は必ず 1→2→3→4 の順…スタック・キュー2 つのスタック inStk と outStk を用いてキューを実現する。enq は inStk に push する。deq は outStk が空なら i…スタック・キュー次の擬似言語は、キュー q を用いて整数を処理する。先頭から値を取り出し、それが 3 で割り切れれば total に加えて捨て、割り切れなければ「値−1」を…スタック・キュー両端キュー(デック)dq に対し、pushFront(先頭に追加)、pushBack(末尾に追加)、popFront(先頭から取り出して返す)、popBac…スタック・キュー値スタック valStk と最大値スタック maxStk の 2 本を使い、push 時に「これまでの最大値」も同時に積むことで、頂上の最大値を即座に参照で…スタック・キュー空のスタックに対し、文字 'P' は次の数を push する操作、文字 'o' は pop する操作(取り出すだけで値は捨てる)を表す。push する数は左…スタック・キュー印刷ジョブを先着順(FIFO)で処理するキュー q がある。各ジョブは (id, ページ数) を持ち、deq したジョブのページ数を累計し、累計が初めて 5…スタック・キュー次の擬似言語は、文字列 s を左から走査し、スタック頂上と同じ文字が来たら頂上を pop して両者を消し、異なれば push する処理で、隣接した同一文字の…スタック・キュー容量 4 の循環キュー(リングバッファ)を配列 buf[1..4] で実装する。head は次に取り出す位置、tail は次に入れる位置で、初期は head…スタック・キュー同じ入力列 1, 2, 3, 4 を、(A) スタック(push 後にすべて pop)と (B) キュー(enqueue 後にすべて dequeue)でそれ…連結リスト単方向連結リストの各ノードはメンバ val(整数)と next(次ノードへの参照。なければ NULL)をもつ。次の擬似言語は、先頭 head から連なるリス…連結リスト単方向連結リストの各ノードは val(整数)と next(参照、なければ NULL)をもつ。次の擬似言語は、値 target をもつ最初のノードを 1 つだ…連結リスト単方向連結リストの各ノードは val と next(参照、末尾は NULL)をもつ。次の擬似言語は、リスト a の末尾にリスト b をつなげ、連結後の先頭を…連結リスト単方向連結リストの各ノードは val と next(参照、末尾は NULL)をもつ。次の擬似言語は、low を 1 歩・high を 2 歩ずつ進める二走査…木構造空の 2 分探索木に対し、次の擬似言語の挿入規則に従って 400, 200, 600, 100, 300, 500 をこの順に挿入した。挿入後の木において、…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=500、500 の左の子=300、500 の右の子=800、300 の左の…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=500、500 の左の子=300、500 の右の子=800、300 の左の…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=500、500 の左の子=300、500 の右の子=800、300 の左の…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=A、A の左の子=B、A の右の子=C、B の左の子=D、C の左の子=E…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=A、A の左の子=B、A の右の子=C、B の左の子=D、C の左の子=E…木構造次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=500、500 の左の子=300、500 の右の子=800、300 の左の…木構造2 分探索木に 500, 250, 750, 100, 400, 600, 900 をこの順に挿入してある(小さければ左、大きければ右)。次の擬似言語は、根…
科目Bのトレースを、そのまま画面上で。
登録すると、擬似言語のトレースを1行ずつ画面で追える練習モードと、間違えた問題の解き直しが使えます。科目Aの過去問演習・模試も無料枠で試せます。
登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。
