牛客16464 神奇的幻方

2021-10-18 01:31:34 字數 1717 閱讀 1056

時間限制:c/c++ 1秒,其他語言2秒

空間限制:c/c++ 131072k,其他語言262144k

64bit io format: %lld

題目描述

幻方是一種很神奇的 n*n 矩陣:它由數字 1,2,3,…n x n 構成,且每行、每列及兩條對角線上的數字之和都相同。

當 n 為奇數時,我們可以通過下方法構建乙個幻方:

首先將 1 寫在第一行的中間。

之後,按如下方式從小到大依次填寫每個數 k (k=2,3,…,n x n) :

1.若 (k-1) 在第一行但不在最後一列,則將 k 填在最後一行, (k-1) 所在列的右一列;

2.若 (k-1) 在最後一列但不在第一行,則將 k 填在第一列, (k-1) 所在行的上一行;

3.若 (k-1) 在第一行最後一列,則將 k 填在 (k-1) 的正下方;

4.若 (k-1) 既不在第一行,也最後一列,如果 (k-1) 的右上方還未填數,則將 k 填在 (k-1) 的右上方,否則將 l 填在 (k-1) 的正下方。

輸入描述:

乙個正整數 n ,即幻方的大小。

輸出描述:

共 n 行 ,每行 n 個整數,即按上述方法構造出的 n x n 的幻方,相鄰兩個整數之間用單空格隔開。

按照題目描述直接分情況討論就可以

n =

int(

input()

)h =

for i in

range

(n):

)for j in

range

(n):

h[i]0)

h[0][

int(

(n-1)/

2)]=

1for k in

range(2

, n**2+

1):for i in

range

(n):

for j in

range

(n):

if k-

1== h[i]

[j]:

if i==

0and j!=n-1:

h[n-1]

[j+1]=k

elif i!=

0and j==n-1:

h[i-1]

[0]=k

elif i==

0and j==n-1:

h[i+1]

[j]=k

elif i!=

0and j!=n-1:

if h[i-1]

[j+1]==

0:h[i-1]

[j+1]=k

else

: h[i+1]

[j]=k

#print(h)

for i in

range

(n):

for j in

range

(n):

print

(h[i]

[j], end =

" ")

print

(" "

)

openjudge 神奇的幻方

神奇的幻方 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65535kb 描述幻方是乙個很神奇的n n矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 1.第乙個數字寫在第一行的中間 2.下乙個數字,都寫在上乙個數字的右上方 a.如...

神奇的幻方 模擬

幻方是乙個很神奇的 n n 矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 第乙個數字寫在第一行的中間 如果該數字在第一行,則下乙個數字寫在最後一行,列數為該數字的右一列 如果該數字在最後一列,則下乙個數字寫在第一列,行數為該數字的上一行 如果該...

1477 神奇的幻方

描述 問題描述 幻方是一種很神奇的 nn 矩陣 它由數字 1,2,3,nn 構成,且每行 每列及兩條對角線上的數字之和都相同。當n為奇數時,我們可以通過以下方法構建乙個幻方 首先將 1 寫在第一行的中間。之後,按如下方式從小到大依次填寫每個數k k 2,3,n n 若 k 1 在第一行但不在最後一列...