基本情報【科目B】令和4年度サンプル問題問12(式の読解・類似度):cntが何を数えるかを式と照合するだけ!

Uncategorized

基本情報技術者試験 科目Bの「令和4年度 サンプル問題 問12」(式の読解・配列の類似度 simRatio)を、図解で解説します。穴埋めの中身は、cnt が何を数えている変数なのかを、戻り値の式と照らし合わせる だけで決まります。

動画で見たい方はこちら▼

問題(令和4年度 サンプル問題 問12)

次のプログラム中の【 】に入れる正しい答えを,解答群の中から選べ。
ここで,配列の要素番号は 1 から始まる。

関数 simRatio は,引数として与えられた要素数1以上の二つの文字型の配列 s1 と s2 を比較し,要素数が等しい場合は,配列の並びがどの程度似ているかを示す指標として,(要素番号が同じ要素の文字同士が一致する要素の組の個数 ÷ s1 の要素数)を返す。すべて一致すれば戻り値は1,一致しなければ0,要素数が異なる場合は −1 を返す。

表 関数 simRatio に与える s1,s2 及び戻り値の例

s1 s2 戻り値
{ “a”, “p”, “p”, “l”, “e” } { “a”, “p”, “p”, “l”, “e” } 1
{ “a”, “p”, “p”, “l”, “e” } { “a”, “p”, “r”, “i”, “l” } 0.4
{ “a”, “p”, “p”, “l”, “e” } { “m”, “e”, “l”, “o”, “n” } 0
{ “a”, “p”, “p”, “l”, “e” } { “p”, “e”, “n” } −1
○ 実数型: simRatio(文字型の配列: s1, 文字型の配列: s2)
    整数型: i, cnt ← 0
    if (s1の要素数 ≠ s2の要素数)
      return −1
    endif
    for (i を 1 から s1の要素数 まで 1 ずつ増やす)
      if (【 】)
        cnt ← cnt + 1
      endif
    endfor
    return cnt ÷ s1の要素数   /* 実数として計算する */

解答群

ア s1[i] ≠ s2[cnt] イ s1[i] ≠ s2[i] ウ s1[i] = s2[cnt] エ s1[i] = s2[i]

本番さながらの環境で解いてみたい方はこちら↓

解説

正解は s1[i] = s2[i] です。

①解答群を整理

解答群を整理すると、以下の2点が問われています。

  • =
  • s2[i]s2[cnt]

②【 】が真のとき何が起こるか

IF の中の処理は cnt ← cnt + 1。つまり【 】が真のときに cnt を1増やす、とわかります。

③cnt が何を指すかを式と照合

cnt は最後に return cnt ÷ s1の要素数 で使われています。

問題文より、戻り値は「要素番号が同じ要素の文字同士が一致する要素の組の個数 ÷ s1 の要素数」なので、この式と照らし合わせます。

問題文 要素番号が同じ要素の文字同士が一致する要素の組の個数 ÷ s1の要素数
プログラム cnt ÷ s1の要素数

cnt は「要素番号が同じ要素の文字同士が一致する組の個数」に該当します。
つまり「要素番号が同じ位置で文字が一致」したときに cnt を増やせばよいので、条件は s1[i] = s2[i]、合致する選択肢は です。

Point: プログラム全体を理解する必要はない
正解さえ分かれば、表の全例や「要素数が異なる場合は −1」がプログラムのどこに対応するか、までは追わなくて構いません。正解することが目的。情報の取捨選択は実務でも大切です。

Memo: 式と解答群を同時に見える状態に
式読解は、式と解答群を 同時に見える状態 にすると格段に解きやすくなります。本番の CBT 画面はズームや欄幅調整ができるので、スクロールを減らしてから解き始めましょう。

関連リンク

基本情報科目B-サンプル問題【全44問をがっつり解説】
※一部、執筆途中です。随時アップしていきます。 ※サンプル問題だけを解くのは,非効率です。詳細は以下の動画をご確認ください。 読者限定プレゼント 科目B 演習サイトを無料プレゼント中 ⏱ 2分で終わるアンケートに答えるだけ! ▶ 演習サイト...

関連動画

式の読解の基礎が学べる、同じ章の動画です。

講座の全動画はこちら(プレイリスト)。

タイトルとURLをコピーしました