配列Aが図2の状態のとき,図1の流れ図を実行すると,配列Bが図3の状態になった。
図1のaに入れるべき操作はどれか。
ここで,配列A,Bの要素をそれぞれA(i, j),B(i, j)とする。
正答4
解説
正解は4です。
流れ図で配列Aの各要素を配列Bへ移したとき、Bが図3の形になる操作を選ぶ問題です。
ループ1はiを0から7まで、ループ2はjを0から7まで1ずつ増やします。
図2の配列Aでは、*が「F」の形に並んでいます。
*は0行目の1〜6列、1列目の0〜7行、3行目の1〜4列にあります。
図3の配列Bでは、1行目の0〜7列、7列目の1〜6行、4列目の1〜4行に*があります。
Bは、Aの「F」を時計回りに90度回転させた形です。
【選択肢別解説】
1:× A(i, j)をB(7-i, 7-j)に移すと、図形は180度回転します。
A(0, 1)はB(7, 6)に移りますが、図3のB(7, 6)は空なので誤りです。
2:× A(i, j)をB(7-j, i)に移すと、図形は反時計回りに90度回転します。
A(0, 1)はB(6, 0)に移りますが、図3のB(6, 0)は空なので誤りです。
3:× A(i, j)をB(i, 7-j)に移すと、図形は左右反転します。
A(0, 1)はB(0, 6)に移りますが、図3の0行目には*がないので誤りです。
4:○ A(i, j)をB(j, 7-i)に移すと、時計回りに90度回転します。
1列目の縦棒A(0〜7, 1)はB(1, 7〜0)となり、Bの1行目全体に並びます。
0行目の横棒A(0, 1〜6)はB(1〜6, 7)となり、Bの7列目に並びます。
3行目の横棒A(3, 1〜4)はB(1〜4, 4)となり、Bの4列目に並びます。
すべて図3と一致します。
【ポイント】
8×8の配列で時計回りに90度回すには、元のi行j列を新しいj行(7-i)列に置きます。
こうした問題は、*のある具体的な要素を1つ選んで各選択肢に当てはめると、速く確実に判定できます。