平成23年度 秋期 午前 問6
アルゴリズム
配列に関する問題
次の規則に従って配列の要素 A[0],A[1],…,A[9] に正の整数 k を格納する。k として 16,43,73,24,85 を順に格納したとき,85 が格納される場所はどこか。ここで,x mod y は x を y で割った剰余を返す。また,配列の要素は全て0に初期化されている。
〔規則〕 (1) A[k mod 10] = 0 ならば,k → A[k mod 10] とする。 (2) (1)で格納できないとき,A[(k+1) mod 10] = 0 ならば,k → A[(k+1) mod 10] とする。 (3) (2)で格納できないとき,A[(k+4) mod 10] = 0 ならば,k → A[(k+4) mod 10] とする。
- アA[3]
- イA[5]
- ウA[6]
- エA[9]
答えと解説を見る
✓ これが正解エA[9]
解説
先に入った値が候補をふさぎ、三つ目の規則まで進みます。
この規則は、まず値を10で割った剰余の位置に入れようとし、そこが空いていなければ次の候補、それも駄目なら三つ目の候補を試す形になっています。候補になる位置は、値そのもの、値に1を足したもの、値に4を足したもの、それぞれを10で割った剰余です。配列の要素は0で初期化されているので、0のままの位置が空きを表します。大事なのは、格納が指定された順に行われる点です。先に入った値は、後から来る値の候補をふさぎます。ですから最後の値だけを見ても答えは出ず、前の四つがどこに入ったかを順に追う必要があります。実際に追うと、一つ目は6の位置、二つ目は3の位置、三つ目は3が埋まっているので4の位置、四つ目は4が埋まっているので5の位置に入ります。判定の軸は、最後の値について三つの候補を順に当て、そこが埋まっているかどうかを一つずつ確かめることです。
ほかの選択肢はなぜ違うのか
- アA[3]:この番号は、最後に格納する値について規則が示す三つの候補のどれにも当たりません。導かれるのは5と6と9の三つだけなので、そもそも入る余地がない位置です。
- イA[5]:一つ目の候補として正しく求まる番号ですが、直前に格納された値が既にこの位置を占めています。空いていないため次の候補へ進むことになり、ここには入りません。
- ウA[6]:二つ目の候補として正しく求まる番号ですが、いちばん最初に格納された値がこの位置を使っています。空いていないため、三つ目の候補まで進むことになります。
出典:平成23年度 秋期 基本情報技術者試験 午前 問6(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)