2017年4月8日土曜日

[平成28年度秋] 午後 問3 解説

[問題文・解答]


平成28年度10月に実施された応用情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は選択問題です。
出題分野はプログラミングで、題材は魔方陣です。


[設問1]

考え方はいくつかあると思います。
例えばN×Nの方陣の全マス目の合計値は、1からN2までの整数の和である為
N2(1+N2)÷2
となります。
ここで、各列ごとの合計値は全て一致し、全N列分の合計値が上記の全マス目の合計値と一致します。
従って、N2(1+N2)÷2÷N=(N3 + N)÷2 となります。

[答] N3

[設問2]

(1)

function shokika(N)は方陣用配列houjinの初期値を設定する関数です。
P.13中段の説明より、方陣の枠内は0、外枠右側はSOTO_MIGI、外枠下側はSOTO_SHITA、外枠右下はSOTO_KADOを初期値として入れます。xは列、yは行を表すインデックスです。
イでは外枠右側(各行の右端列)の設定を行うため、houjin[y][N+1]に設定します。
ウでは外枠右下(最下行の右端以外)の設定を行うため、houjin[N+1][x]に設定します。

function mahoujin(N)は、P.12に述べられている魔方陣の作り方を順次実行していく関数です。
エは手順(2)の最下行中央のマス目を現在位置とする部分で、xに中央のマス目を示すインデックスを代入するため、「x ← (N+1)/2」となります。
オでは、手順(3)〜(5)をマス目が埋まるまで繰り返す際の終了条件を記述します。手順(3)〜(5)では、マス目に記載する数(suuji)を1つずつ増やしていき、 N2未満の間は手順を繰り返します。
カ、キでは手順(4)で次の現在位置予定のマスが既に数字が埋まっている場合に、新しい現在位置として現在位置の真上のマスを選択します。
[答]
イ) houjin[y][N+1]
ウ) houjin[N+1][x]
エ) x ← (N+1)/2
オ) N2未満
カ) yb-1
キ) xb

(2)

現在位置の移動では、基本的に現在位置から右下に進んでいき、既に埋まっている場合は現在位置の真上に移動します。従って、houjinのうち魔方陣の外側にある右上のマスと左下のマスは参照されることはありません。(外側なので当然代入も無し)
[答] ・houjin[1][N+1] ・houjin[N+1][1]

[設問3]

x,yともに魔方陣の枠からはみ出している場合に枠内に戻してやればよいです。
現在位置は右下に進んでいき最下行までいくと最上行に、最右列まで行くと最左列に戻すため、Nより大きくなったら1に戻せばよいです。
[答] ク) N ケ) 1

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿