科目B

基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問12

次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。 関数 simRatio は,引数として与えられた要素数 1 以上の二つの文字型の配列 s1 と s2 を比較し,要素数が等しい場合は,配列の並びがどの程度似ているかの指標として,(要素番号が同じ要素の文字同士が一致する要素の組みの個数 ÷ s1の要素数)を実数型で返す。例えば,配列の全ての要素が一致する場合の戻り値は 1,いずれの要素も一致しない場合の戻り値は 0 である。 なお,二つの配列の要素数が等しくない場合は,-1 を返す。 関数 simRatio に与える s1,s2 及び戻り値の例を表に示す。プログラムでは,配列の領域外を参照してはならないものとする。 表 関数 simRatio に与える s1,s2 及び戻り値の例
s1s2戻り値
{"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の要素数  /* 実数として計算する */
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問12(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:エ

覚える知識

配列要素の比較による一致数カウント

2 つの配列を同じ要素番号で 1 つずつ比べ、条件を満たすたびにカウンタを 1 増やすと、一致した個数が求まる。

この問題で必要なこと

一致した組を数えるので、同じ要素番号 i どうしで s1[i] = s2[i] のときに cnt を増やす。正解はエ。

ひっかけ

条件を ≠ にすると不一致の数を数えてしまう(ア・イ)。添字に cnt を使うと比べる位置がずれ、cnt=0 のときは領域外を参照する(ア・ウ)。