サンプル問題 科目B 問12

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

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

なお,二つの配列の要素数が等しくない場合は,-1 を返す。 関数 simRatio に与える s1,s2 及び戻り値の例を表に示す。プログラムでは,配列の領域外を参照してはならないものとする。 

〔プログラム〕 

○実数型: 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] 

出典:基本情報技術者試験 サンプル問題

解いてみる

これは2つの配列について、順番に各要素が一致しているかどうか確認するプログラムのようです。配列の要素数に対して、一致している要素の数の割合を返します。

一致している要素の数は変数cntに入っているので、問われているのはその値を+1する条件です。これは、2つの要素が一致したかどうかなのでエですね。

この問題を見た印象は

問題の文字数が多く表もあるので、ちょっと身構えてしまうのですが、解いてみると簡単な問題でした。とはいえ、実際の試験では限られた時間の中で解くことになるので、簡単な問題か難しい問題かを見極めるのが重要になりそうです。