2018年02月26日

(H29A-FE-PM8)平成29年秋基本情報午後(問8)データ構造及びアルゴリズム

目次・平成29年秋基本情報の解答解説

公式サイト
午後問題PDF
午後解答PDF

問1は必須問題。全員が解答する。
問2〜問7は選択問題、6問中4問を選択して解答する。
問9〜問13は選択問題、5問中1問を選択して解答する。

問8:データ構造及びアルゴリズム:文字列の誤りの検出

ロジック自体はシンプルで問題文通りに解答すれば正答を得られる。設問ごとの独立性も高い。問題文が長く、丁寧で根気のよい作業が必要。

難易度:普通


設問1)a.

問題文P.37 (1) A「偶数番目の文字に割り当てた数値は、そのまま全て足し合わせる」とある。is_even = [a1] が成立した場合にこの処理を行っているので、偶数の場合の処理だとわかる。is_evenは名称から偶数番目の文字の場合に真になるので、a1 : true。念のため最初の文字=1文字目は奇数で、is_even は false で初期化しているので変数名は内容と一致していることを確認しておく。

問題文P.38 (2) A「奇数番目の文字に割り当てた数値は、そのまま全て足し合わせる」とある。is_odd = [a2] が成立した場合にこの処理を行っているので、奇数の場合の処理だとわかる。is_oddは名称から奇数番目の文字の場合に真になるので、a2 : true。念のため最初の文字=1文字目は奇数で、is_odd は true で初期化しているので変数名は内容と一致していることを確認しておく。

( a1, a2 ) = ( true, true ) の組み合わせが正答。

    b.

問題文P.37 (1)C問題文中「Nから、Bで求めた総和を N で割った余りを引く。さらにその結果を、N で割り、余りを求める。」とあるのでこれをそのまま式とする。

「Bで求めた総和を N で割った余り」…… sum % N
「Nから、Bで求めた総和を N で割った余りを引く。」…… N - sum % N
「……さらにその結果を、N で割り、余りを求める。」…… ( N - sum % N ) % N

    c.

問題文P.38 (2) C問題文中「Bで求めた総和が N で割り切れる場合は、検査文字付き文字列に誤りがないと判断する。 N で割り切れない場合は、検査文字付き文字列に誤りがあると判定する」とある。

ret_value は true で初期化され、[c] が成立した場合にのみ false にされるので、誤りがあると判定される条件が [c] に入る。それは「N で割り切れない場合」なので

sum % N != 0

設問2)d.

表4は文字の入れ替えが合った場合に誤り判定ができない例である。偶数位置の文字が別の偶数位置の文字と入れ替わっただけの場合や、奇数位置の文字が別の奇数位置の文字と入れ替わった場合には、この方法では誤り判定ができないことは原理からわかる。

なので、全てのケースについてチェックする必要はない。

ipa□□f:と比較した場合(検査文字を1文字目として後ろから数える)

ケース1)ipb□□f:4文字目がaからbに変換されている。×
ケース2)api□□f:4文字目と6文字目が入れ替わっている。偶数同士で文字自体は違いがないので、正しと判定される。○
ケース3)pia□□f:5文字目と6文字目が入れ替わっている。奇数と偶数の入れ替えなので誤りと判定される。×
ケース4)□□apif:2文字目が6文字目と、3文字目が5文字目と入れ替わっている。奇数同士、偶数同士の入れ替わりなので、正しいと判定される。○

誤りがないと判定されるのは「2と4である」。


設問3)a.

原理に従って総和を計算する。スペースを「□」で表す。

□ → 0
s → 22
N = 30

□s□□

後ろから
(1) □:( 0 * 2 ) / N + ( 0 * 2 ) % N = 0 / 30 + 0 % 30 = 0
(2) □:0
(3) s : ( 22 * 2 ) / N + ( 22 * 2 ) % N = 44 / 30 + 44 % 30 = 1 + 14 = 15
(4) □:0

sum = 0 + 0 + 15 + 0 = 15

check_value = ( N - sum % N ) % N = ( 30 - 15 % 30 ) % 30 = ( 30 - 15 ) % 30
= 15 % 30 = 15

15 → l


設問4)a.


行方向については(1), (3)は1行目が誤りと判定されるのでこれは考慮する必要がない。

ケース2)api□□f:1列,3列以外の列は同じなので正しいと判定される。が、1列、3列は1行目の文字が違う文字に入れ替わっているので誤りと判定される。
ケース4)□□apif:3列については同じなので正しいと判定される。が、1列、2列、4列、5列については1行目の文字が違う文字に入れ替わっているので誤りと判定される。

よってすべてのケースで誤りと判定され、誤りがないと判定されるケースは「ない」。




posted by eienlearner at 22:57| 大阪 ☀| Comment(0) | 情報処理技術者試験 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。