HDU 1998 奇數階魔方

2021-06-22 21:14:39 字數 2062 閱讀 5858

problem description

乙個 n 階方陣的元素是1,2,...,n^2,它的每行,每列和2條對角線上元素的和相等,這樣

的方陣叫魔方。n為奇數時我們有1種構造方法,叫做「右上方」 ,例如下面給出n=3,5,7時

的魔方. 3

8 1 6

3 5 7

4 9 2 5

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 7

30 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,從這三個魔方,你可看出「右

上方」是何意。 

input

包含多組資料,首先輸入t,表示有t組資料.每組資料1行給出n(3<=n<=19)是奇數。

output

對於每組資料,輸出n階魔方,每個數占4格,右對齊

sample input

235

sample output

8   1   6

3 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

模仿陣:

由1開始填數,將1放在第0行的中間位置。

將魔方陣想象成上下、左右相接,每次往左上角走一步,會有下列情況:

左上角超出上方邊界,則在最下邊相對應的位置填入下乙個數字;

左上角超出左邊邊界,則在最右邊相應的位置填入下乙個數字;

如果按上述方法找到的位置已填入資料,則在同一列下一行填入下乙個數字。

以3×3魔方陣為例,說明其填數過程,如圖2所示。

圖2 三階魔方陣的生成過程

由三階魔方陣的生成過程可知,某一位置(x,y)的左上角的位置是(x-1,y-1),如果x-1≥0,不用調整,否則將其調整為x-1+m;同理,如果y-1≥0,不用調整,否則將其調整為y-1+m。所以,位置(x,y)的左上角的位置可以用求模的方法獲得,即:

x=(x-1+m)%m

y=(y-1+m)%m

如果所求的位置已經有資料了,將該資料填入同一列下一行的位置。這裡需要注意的是。此時的x和y已經變成之前的上一行上一列了,如果想變回之前位置的下一行同一列,x需要跨越兩行,y需要跨越一列,即:

x=(x+2)%m

y=(y+1)%m

注意:可以考慮使用其他方法生成魔方陣。任何演算法都有不同的實現方法,通過採用不同實現方法來重新實現演算法,這要比單純學習演算法的效果好得多。

題目簡單 就是需要耐心計算

#include#include#define max 20

int main()

; int i,j,x=1,y,m;

scanf("%d",&m);

a[1][(m+1)/2]=1;

y=(m+1)/2;

for(i=2;i<=m*m;i++)

continue;

}if(x-1<=0&&y-1>0)

continue;

}if(x-1>0&&y-1<=0)

else

continue;

}if(x-1<=0&&y-1<=0)

continue;}}

for(i=1;i<=m;i++)

printf("\n");}}

return 0;

}

hdu 1998 奇數階魔方

hdu 1998 奇數階魔方 題意 給出奇數n,用右上法構造乙個n階魔方 思路 由題目給出的示例中可以知道,右上法構造方法如下 從第一行的中間數開始為1,然後這個位置的上一行右邊為這個數 1,如果新位置已被使用,則新位置改為舊位置的正下方 author licatweijie include inc...

奇數階魔方 HDU 1998

乙個 n 階方陣的元素是1,2,n 2,它的每行,每列和2條對角線上元素的和相等,這樣 的方陣叫魔方。n為奇數時我們有1種構造方法,叫做 右上方 例如下面給出n 3,5,7時 的魔方.3 8 1 6 3 5 7 4 9 2 5 17 24 1 8 15 23 5 7 14 16 4 6 13 20 ...

hdu 1998 奇數階魔方(找規律 模擬)

應該不算太水吧。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 對於上面的資料,根據題目中的提示,很容易就看到對角線上的數字是11 12 13 14 15。其他的資料,比如說2,從2往右上查就是2 3 4 5 1。描...