科目B
基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問12
次のプログラム中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。
関数 simRatio は,引数として与えられた要素数 1 以上の二つの文字型の配列 s1 と s2 を比較し,要素数が等しい場合は,配列の並びがどの程度似ているかの指標として,(要素番号が同じ要素の文字同士が一致する要素の組みの個数 ÷ s1の要素数)を実数型で返す。例えば,配列の全ての要素が一致する場合の戻り値は 1,いずれの要素も一致しない場合の戻り値は 0 である。
なお,二つの配列の要素数が等しくない場合は,-1 を返す。
関数 simRatio に与える s1,s2 及び戻り値の例を表に示す。プログラムでは,配列の領域外を参照してはならないものとする。
表 関数 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の要素数 /* 実数として計算する */
答えを選ぶ
出典:基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問12(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:エ
覚える知識
配列要素の比較による一致数カウント
2 つの配列を同じ要素番号で 1 つずつ比べ、条件を満たすたびにカウンタを 1 増やすと、一致した個数が求まる。
この問題で必要なこと
一致した組を数えるので、同じ要素番号 i どうしで s1[i] = s2[i] のときに cnt を増やす。正解はエ。
ひっかけ
条件を ≠ にすると不一致の数を数えてしまう(ア・イ)。添字に cnt を使うと比べる位置がずれ、cnt=0 のときは領域外を参照する(ア・ウ)。