幻方是一種很神奇的n*n矩陣:它由數字1,2,3,……,n*n構成,且每行、每列及兩條對角線上的數字之和都相同。
當n為奇數時,我們可以通過以下方法構建乙個幻方:
首先將1寫在第一行的中間。
之後,按如下方式從小到大依次填寫每個數k(k=2,3,…,n*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)的右上方,否則將k填在(k−1)的正下方。
現給定n請按上述方法構造n*n的幻方。
輸入格式:
輸入檔案只有一行,包含乙個整數n即幻方的大小。
輸出格式:
輸出檔案包含n行,每行n個整數,即按上述方法構造出的n*n的幻方。相鄰兩個整數之間用單個空格隔開。
題解
存陣列最好從一開始存,因為比較好記...
code
#includeusingnamespace
std;
int k[41][41
]; int
n,i,j,last_x,last_y;
//last_x last_y分別計上乙個數的橫縱座標
intmain()
if(last_y==n&&last_x!=1
)
if(last_x==1&&last_y==n)
if(k[last_x-1][last_y+1]==0
)
else
}for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
else
//是這行最後乙個
}return0;
}
end.
神奇的幻方 模擬
幻方是乙個很神奇的 n n 矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 第乙個數字寫在第一行的中間 如果該數字在第一行,則下乙個數字寫在最後一行,列數為該數字的右一列 如果該數字在最後一列,則下乙個數字寫在第一列,行數為該數字的上一行 如果該...
openjudge 神奇的幻方
神奇的幻方 檢視 提交 統計 提問 總時間限制 1000ms 記憶體限制 65535kb 描述幻方是乙個很神奇的n n矩陣,它的每行 每列與對角線,加起來的數字和都是相同的。我們可以通過以下方法構建乙個幻方。階數為奇數 1.第乙個數字寫在第一行的中間 2.下乙個數字,都寫在上乙個數字的右上方 a.如...
1477 神奇的幻方
描述 問題描述 幻方是一種很神奇的 nn 矩陣 它由數字 1,2,3,nn 構成,且每行 每列及兩條對角線上的數字之和都相同。當n為奇數時,我們可以通過以下方法構建乙個幻方 首先將 1 寫在第一行的中間。之後,按如下方式從小到大依次填寫每個數k k 2,3,n n 若 k 1 在第一行但不在最後一列...