牛客16464 神奇的幻方
鏈接:https://ac.nowcoder.com/acm/problem/16464
來(lái)源:牛客網(wǎng)
時(shí)間限制:C/C++ 1秒,其他語(yǔ)言2秒
空間限制:C/C++ 131072K,其他語(yǔ)言262144K
64bit IO Format: %lld
題目描述
幻方是一種很神奇的 N*N 矩陣:它由數(shù)字 1,2,3,…N x N 構(gòu)成,且每行、每列及兩條對(duì)角線上的數(shù)字之和都相同。
當(dāng) N 為奇數(shù)時(shí),我們可以通過(guò)下方法構(gòu)建一個(gè)幻方:
首先將 1 寫在第一行的中間。
之后,按如下方式從小到大依次填寫每個(gè)數(shù) 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) 的右上方還未填數(shù),則將 K 填在 (K-1) 的右上方,否則將 L 填在 (K-1) 的正下方。
輸入描述:
一個(gè)正整數(shù) N ,即幻方的大小。
輸出描述:
共 N 行 ,每行 N 個(gè)整數(shù),即按上述方法構(gòu)造出的 N x N 的幻方,相鄰兩個(gè)整數(shù)之間用單空格隔開(kāi)。
按照題目描述直接分情況討論就可以
N = int(input()) H = [] for i in range(N):H.append([])for j in range(N):H[i].append(0)H[0][int((N-1)/2)] = 1 for 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==0 and j!=N-1:H[N-1][j+1]=kelif i!=0 and j==N-1:H[i-1][0]=kelif i==0 and j==N-1:H[i+1][j]=kelif i!=0 and j!=N-1:if H[i-1][j+1]==0:H[i-1][j+1]=kelse:H[i+1][j]=k #print(H)for i in range(N):for j in range(N):print(H[i][j], end =" ")print(" ")總結(jié)
以上是生活随笔為你收集整理的牛客16464 神奇的幻方的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据库高级知识——MySql锁机制
- 下一篇: 牛客14718 开心的涂刷