pythonでやってみました
応用情報技術者試験 平成28年秋期試験午前問題 午後問3
平成28年度秋期
n = int(input())#定数
houjin = [[1] * (n+1) for i in range(n+1)]#リストは(n+1)方陣になってくれる
②次に初期化
def shokika(l, k):#shokikaに、リストと定数を入力すればリストを返す
for y in range(k+1):
for x in range(k+1):
if x <= k-1 and y <=k-1:
l[y][x] = 0
elif x >= k-1 and y <=k-1:
l[y][x] = 'm'#sotomigiだと綺麗にならないから
elif x <= k-1 and y >= k-1:
l[y][x] = 's'#sotoshitaだと綺麗にならないから
else:
l[y][x] = 'soto_kado'
return l
③mahoujinを作る
def mahoujin(m, q):#mahoujinに、リストと定数を入力すれば完成させる
suuji = 1#suuji を初期化
y = q - 1#yを初期場所へ
x = (q+1)//2-1#xを初期場所へ
m[y][x] = suuji
while suuji <= q**2-1:
yb = y#初期2(例n=3)
xb = x#初期1(例n=3)
y += 1
x += 1
if m[y][x] == 's':
y = 0
elif m[y][x] == 'm':
x = 0
elif m[y][x] == 'soto_kado':
x = 0
y = 0
if m[y][x] != 0:
if yb - 1 < 0:
y = yb - 2
else:
y = yb - 1
x = xb
suuji += 1
m[y][x] = suuji
return m
④いざ実践
shokika(houjin, n)#初期化実行
mahoujin(houjin, n)#魔法陣実行
import numpy as np
def clear(s):#リスト代入で見やすく
t = np.array(s)
return t
print(clear(houjin))#綺麗に見せるためのNumpy
'''n = 3 で
[['4' '9' '2' 'm']
['3' '5' '7' 'm']
['8' '1' '6' 'm']
['s' 's' 's' 'soto_kado']]
'''
コメント