時間限制:
1000 ms | 記憶體限制:
65535 kb
難度:3 描述
乙個 n 階方陣的元素是1,2,...,n^2,它的每行,每列和2條對角線上元素的和相等,這樣
的方陣叫魔方。n為奇數時我們有1種構造方法,叫做「右上方」 ,例如下面給出n=3,5,7時
的魔方.
38 1 6
3 5 7
4 9 2
517 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
730 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
第1行中間的數總是1,最後1行中間的數是n^2,他的右邊是2,從這三個魔方,你可看出「右
上方」是何意。
輸入
包含多組資料,首先輸入t,表示有t組資料.每組資料1行給出n(3<=n<=19)是奇數。
輸出對於每組資料,輸出n階魔方,每個數占4格,右對齊
樣例輸入
235
樣例輸出
8 1 63 5 7
4 9 2
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
規律:從第一行中間乙個數開始更新,如果是當前位置在第一行(但不是最後一列),下乙個位置是 下一列最後一行;如果當前位置是最後一列(但不是第一行),下乙個位置是 上一行第一列;如果不是最後一列並且右上角的值沒有更新,下乙個位置就是右上角;如果右上角的值已經更新,下乙個位置是下一行同一列位置;如果當前位置在最右上角,下乙個位置是同列下一行位置;
[cpp]view plain
copy
#include
#include
intmain()
else
if(j==n&&i!=1)
/*最後一列但不是第一行*/
else
if(j!=n&&!vis[i-1][j+1])
/*更新右上角的值*/
else
if(i!=n&&j!=n&&vis[i-1][j+1])
/*右上角已更新*/
i=i+1; /*跳到同列下一行*/
else
if(i==1&&j==n)
/*最右上角*/
i=i+1; /*跳到同列下一行*/
ans++;
} for
(i=1;i<=n;i++)
} return
0;
}
奇數階魔方
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 乙個 n 階方陣的元素是1,2,n 2,它的每行,每列和2條對角線上元素的和相等,這樣 的方陣叫魔方。n為奇數時我們有1種構造方法,叫做 右上方 例如下面給出n 3,5,7時 的魔方.38 1 6 3 5 7 4 9 2 517...
奇數階魔方 1998
problem description 乙個 n 階方陣的元素是1,2,n 2,它的每行,每列和2條對角線上元素的和相等,這樣 的方陣叫魔方。n為奇數時我們有1種構造方法,叫做 右上方 例如下面給出n 3,5,7時 的魔方.38 1 6 3 5 7 4 9 2 517 24 1 8 15 23 5 ...
奇數階魔方陣(洛書)
題目 將1 n的數子排列在n n的方陣上,要求數子不能重複,方陣各行 各列 及兩條對角線的數子之和相等。此位魔方陣,又稱洛書 洛書是九行九列 若n為奇數,則為奇數階魔方陣。解題方法 洛書的排列規律如下 將1放在第一行中間一列 從2開始直到n n止各數依次按下列規則存放 每乙個數存放的行比前乙個數的行...