過去問解きまくり研究所 ホーム

平成27年度 秋期 午前 問6

アルゴリズム

配列に関する問題

配列 A が図2の状態のとき,図1の流れ図を実行すると,配列 B が図3の状態になった。図1の a に入れるべき操作はどれか。ここで,配列 A,B の要素をそれぞれ A(i, j),B(i, j) とする。

図(書き起こし): 流れ図と2つの配列の図(絵)。書き起こした構造は次のとおり。

図1 流れ図:

開始
  ループ1  i:0, 1, 7 (注)
    ループ2  j:0, 1, 7 (注)
      ┌───────┐
      │   a   │        ← ここに入れるべき操作を選ぶ
      └───────┘
    ループ2
  ループ1
終了
(注)ループ端の繰返し指定は,変数名:初期値,増分,終値 を示す。

図2 配列 A の状態(行 i=0〜7・列 j=0〜7。`*` が入っている升だけを示す):

i\j01234567
0******
1*
2*
3****
4*
5*
6*
7*

図3 実行後の配列 B の状態:

i\j01234567
0
1********
2**
3**
4**
5*
6*
7

図2 は「F」の字,図3 はそれを右へ90度回した形に見えます(原典にその説明はありません。ここでの補足です)。

答えと解説を見る

✓ これが正解エA(i, j) → B(j, 7−i)

解説

行と列を入れ替え、片方だけ7から引く形が答えです。

配列Aの印は、左から2列目に縦一列に並び、いちばん上の行にも横へ伸びています。配列Bではその縦の並びが横になり、横の並びが縦になっています。ですから入れるべき操作は、行の番号と列の番号を入れ替える働きを含んでいるはずです。ただし入れ替えるだけでは向きが定まらないので、どちらの番号を7から引くかも決める必要があります。確かめ方は決まっています。Aで印の付いている升をいくつか選び、候補の式に当てはめて、Bの印の位置と一致するかを見ます。Aの上端に横へ並ぶ一連の印は、Bでは右端の列に縦に並びます。Aの左寄りに縦へ並ぶ印は、Bでは上から2行目に横一列で現れます。この2つが同時に成り立つ式を選べば決まります。

ほかの選択肢はなぜ違うのか

出典:平成27年度 秋期 基本情報技術者試験 午前 問6(改変:原典の図表をテキストに書き起こした)

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)