2022年4月25日公開分 [科目B]問5

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
 次のプログラム中の に入れる正しい答えを,解答群の中から選べ。

 任意の異なる2文字をc1,c2とするとき,英単語群に含まれる英単語において,c1の次にc2が出現する割合を求めるプログラムである。英単語は,英小文字だけから成る。英単語の末尾の文字がc1である場合,その箇所は割合の計算に含めない。例えば,図に示す4語の英単語"importance","inflation","information","innovation"から成る英単語群において,c1を"n",c2を"f"とする。英単語の末尾の文字以外に"n"は五つあり,そのうち次の文字が"f"であるものは二つである。したがって,求める割合は,2÷5=0.4である。c1とc2の並びが一度も出現しない場合,c1の出現回数によらず割合を0と定義する。
b05_1.png
 プログラムにおいて,英単語群は Words 型の大域変数 words に格納されている。クラス Words のメソッドの説明を,表に示す。本問において,文字列に対する演算子"+"は,文字列の連結を表す。また,整数に対する演算子"÷"は,実数として計算する。
b05_2.png
〔プログラム〕
b05_3.png

  • (words.freq(s1) - words.freqE(s1)) ÷ words.freq(s1+s2)
  • (words.freq(s2) - words.freqE(s2)) ÷ words.freq(s1+s2)
  • words.freq(s1+s2) ÷ (words.freq(s1) - words.freqE(s1))
  • words.freq(s1+s2) ÷ (words.freq(s2) - words.freqE(s2))
正解 問題へ
分野:アルゴリズムとプログラミング
カテゴリ:プログラミングの諸分野への適用
解説
設問中のようにc1が"n"、c2が"f"だった場合を考えると、c1の次にc2が出現する数回数は以下の式で求めることになります。

 ("nf"の並びが出現する回数)÷(文字列の末尾以外で"n"が出現する数)

プログラム上では、変数 s1 にc1が、変数 s2 にc2が格納されているので、それぞれ以下の式で表すことができます。
①c1の次にc2が出現する数
s1とs2が並ぶ文字列(s1+s2)の出現回数を知りたいので、words.freq(s1+s2)
②文字列の末尾以外で"n"が出現する数
"n"が出現する数はwords.freq(s1)、文字列の末尾に"n"が出現する数はwordsE.freq(s1)なので、words.freq(s1) - wordsE.freq(s1)
したがって、①の式を②の式で除した「ウ」の式が適切となります。

Pagetop