基本情報アルゴリズムについて質問です。なぜ、a in[j][RSZ-i-1] b in[i][RSZ-j-1」が正解ですか?

1件の回答

回答を書く

1079496

2026-01-24 17:40

+ フォロー

なかなかイメージしづらい難問ですね。

二次元配列に対してfor文を回すとき、iやjのカウンタが加算されていくときは、行としては上から下、同じ行なら左から右へ処理が進んでいきます。

なので、iは行方向へのカウンタ、jは列方向のカウンタです。



プログラム中に出力とありますが、どこにどういう順番で出力されるかは書いていません。

for文を見ると一文字づつ出力するのですが、出力先は書かれていません。

この場合、j(内側のカウンタ)が増えると左に進む。i(外側のカウンタ)が増えると改行されると考えてください。

(あくまでもイメージです。実際には出力の実装次第です。他の二次元配列を用意してそこに格納するのかもしれません)





さて比較的簡単な左右反転の空欄bから解きます。

なぜ簡単かというと、行は変わらないためです。



また、問題を単純化して8行6列ではなく2行3列で考えます。(別に3行2列でもいいのですが)

RSZは3、CSZは2になります。

配列inはこんなヤツになります。設問のように#じゃわかりにくいので数値データを入れましょう。

00,01,02

10,11,12



左右反転すると

02,01,00

12,11,10

ですね。





左右反転の場合、行は変わらないと書きました。つまりin[i][なにかの法則]の形式になります。

なにかの法則ですが、j=0の時は、in[i][2]を出力したい、j=1の時はin[i][1]を出力したい、j=2の時はin[i][0]を出力したいことになります。

すると、3-j-1でうまくいきそうです。お誂え向きにRSZ=3なので、

空欄bはin[i][RSZ-j-1]となります。



次に左90度回転を考えます。

02,12

01,11

00,10



ですね。順番に考えてみましょう。

for文で

i=0でj=0の時はin[0][2]、i=0でj=1の時はin[1][2]を出力したい。

i=1でj=0の時はin[0][1]、i=1でj=1の時はin[1][1]を出力したい。

i=2でj=0の時はin[0][0]、i=2でj=1の時はin[1][0]を出力したい。

ということになります。



すると、jが0のとき、in[0][何かの法則]、J=1の時はin[1][何かの法則]となっていることに気づきます。

つまり空欄aはin[j][何かの法則]となります。

何かの法則ですが、

なにかの法則ですが、i=0の時は、in[j][2]を出力したい、i=1の時はin[j][1]を出力したい、i=2の時はin[j][0]を出力したいことになります。

さっき見ましたね。今度は3-i-1でうまくいきそうです。お誂え向きにRSZ=3なので、

空欄aはin[j][RSZ-i-1]となります。



これは頭の中では解けないですね。単純化して紙に書いて法則を見つけるようにしましょう。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有