日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

魔方陣

 旭龍 2011-07-12
魔方陣相關(guān)資料
===============================================================================================================
幻方構(gòu)造方法:(有很多種,這里只舉出幾種) 
奇數(shù)階: 
n=2*m+1,m為自然數(shù) 
1)將數(shù)字1填在(0,(n+1)/2) ;要注意c中是從下標0開始 
2)從左上往右下依次填。 
3)由2),列的下標出界(超過n-1)時,行加1,以n為摸的余數(shù)為應(yīng)填的列數(shù); 
4)由2),行的下標出界(超過n-1)時,列加1,以n為摸的余數(shù)為應(yīng)填的行數(shù); 
5)由2),行列都未出界,但已添上其他數(shù),應(yīng)在當前位置左橫移一個位置進行填數(shù)。 

然后是偶數(shù)階: 
前一種:n=4*m+2, m為自然數(shù) 
1)將n階方陣分為四個小魔方陣ABCD如下排列: 

B C 
D A 

因為n*n=4*(2*m+1)*(2*m+1), 
記u=n/2=2*m+1,分為1~u*u,u*u+1~2*u*u,2*u*u+1~3*u*u,3*u*u+1~4*u*u 
即在調(diào)用子函數(shù)的時候分別如下面?zhèn)鬟f參數(shù): 
A(0),B(u*u),C(2*u*u),D(3*u*u) 
分別在ABCD中按照前面的填法把奇數(shù)階填好(注意加上所傳參數(shù)作為基數(shù),每一個元素都要加上這個值),最后做如下交換: 
(1)B中第0~(m-1)-1行中元素與C中相對應(yīng)元素交換 
(2)D中第(n-1)-m+1~(n-1)共m行的每行中的元素與A中相對應(yīng)元素交換 
(3)交換D:(u+m,m)與A中對應(yīng)元素(矩陣中心值) 
(4)交換D:(n-1,m)與A中對應(yīng)元素(實際為矩陣最大值n*n) 

所謂對應(yīng)位置,指相對于小魔方陣的左頂角的相對的行列位置 
上面的這些你可以用數(shù)學(xué)進行證明,利用魔方陣常數(shù)(注意n階的和u階的關(guān)系) 

后一種:n=4*m,m為自然數(shù) 
因為行列都是4的倍數(shù),因而可以將整個矩陣分為每4*4的小矩陣。 
先判斷一個數(shù)是否在劃為4*4小矩陣的對角線上, 
如果在,則填該位置的數(shù)為n*n-i+1(i為該元素的相對位置,從1開始,比如n階的第s行第t個元素則其i=s*n+t) 
如果不在,則填上i。 
===============================================================================================================
魔方陣,古代又稱“縱橫圖”,是指組成元素為自然數(shù)1、2…n的平方的n×n的方陣,其中每個元素值都不相等,且每行、每列以及主、副對角線上各n個元素之和都相等。

如3×3的魔方陣: 
    8   1   6 
    3   5   7 
    4   9   2  
魔方陣的排列規(guī)律如下:
(1)將1放在第一行中間一列;
(2)從2開始直到n×n止各數(shù)依次按下列規(guī)則存放;每一個數(shù)存放的行比前一個數(shù)的行數(shù)減1,列數(shù)加1(例如上面的三階魔方陣,5在4的上一行后一列);
(3)如果上一個數(shù)的行數(shù)為1,則下一個數(shù)的行數(shù)為n(指最下一行);例如1在第一行,則2應(yīng)放在最下一行,列數(shù)同樣加1;
(4)當上一個數(shù)的列數(shù)為n時,下一個數(shù)的列數(shù)應(yīng)為1,行數(shù)減去1。例如2在第3行最后一列,則3應(yīng)放在第二行第一列;
(5)如果按上面規(guī)則確定的位置上已有數(shù),或上一個數(shù)是第一行第n列時,則把下一個數(shù)放在上一個數(shù)的下面。例如按上面的規(guī)定,4應(yīng)該放在第1行第2列,但該位置已經(jīng)被占據(jù),所以4就放在3的下面;

一、魔方陣的簡介

1.何謂矩陣?矩陣就是由方程組的系數(shù)及常數(shù)所構(gòu)成的方陣。把用在解線性方程組上既方便,又直觀。

2.何謂n階方陣?若一個矩陣是由n個橫列與n個縱行所構(gòu)成,共有個小方格,則稱這個方陣是一個n階方陣。 

3.何謂魔方陣? 4 9 2 3 5 7 8 1 6定義:由n*n個數(shù)字所組成的n階方陣,具有各對角線,各橫列與縱行的數(shù)字和都相等的性質(zhì),稱為魔方陣。而這個相等的和稱為魔術(shù)數(shù)字。若填入的數(shù)字是從1到n*n,稱此種魔方陣為n階正規(guī)魔方陣。 

4.最早的魔方陣相傳古時為了幫助治水專家大禹統(tǒng)治天下,由水中浮出兩只龐大動物背上各負有一圖,只有大禹才可指揮其中之由龍馬負出的為河圖,出自黃河;另一由理龜負出的洛書出自洛河。洛書

5.最早的四階魔方陣最早的四階方陣刻在印度一所廟宇石上,年代大約是十一世紀。古代印度人十分崇拜這種幻方,至今從古神殿的遺址,墓碑上常常還可以發(fā)現(xiàn)四階幻方的遺跡。 

6.歐洲最早的魔方陣歐洲最早的方陣是公元1514年德國畫家Albrecht Dure在他著名的銅板畫Melencolia上的4×4幻方,有趣的是,他連創(chuàng)造年代(1514)也鑲在這個方陣中,而且上下左右,四個小方陣的和皆為34,是歐洲最古老的幻方。 


二、魔方陣的變形

1.相異魔方陣對應(yīng)方格所填的數(shù)字不相同的兩個魔方陣,如下圖
16 02 03 13 01 15 04 14 05 11 10 08 12 06 09 07 09 07 06 12 13 03 16 02 04 14 15 01 08 10 05 11 

2.相等魔方陣每一個對應(yīng)方格所填的數(shù)字都相同的兩個魔方陣,如下圖4 9 2 4 9 2 3 5 7 3 5 7 8 1 6 8 1 6 

3.全等魔方陣若一個魔方陣能夠經(jīng)過旋轉(zhuǎn)或鏡射的方式變成和另一個魔方陣相等,稱這兩個魔方陣全等。在計算魔方陣個數(shù)時,我們把全等的魔方陣視為同一種。 2 7 6 8 3 4 9 5 1 1 5 9 4 3 8 6 7 2 

4,剛性變形法(1)順時針方向旋轉(zhuǎn)90 (2)順時針方向旋轉(zhuǎn)180 (3)順時針方向旋轉(zhuǎn)270 (4)左右翻轉(zhuǎn)(繞鉛直對稱軸鏡射) (5)上下翻轉(zhuǎn)(繞水平對稱軸鏡射) (6)左上右下翻轉(zhuǎn)(繞右上至左下對角線鏡射) (7)右上左下翻轉(zhuǎn)(繞左上至右下對角線鏡射) 

原始方陣旋轉(zhuǎn)90。旋轉(zhuǎn)180。旋轉(zhuǎn)270。 01 03 16 14 12 08 13 01 07 05 10 12 14 04 09 07 13 15 02 04 10 06 15 03 09 11 06 08 16 02 11 05 08 06 11 09 05 11 02 16 04 02 15 13 03 15 06 10 12 10 05 07 07 09 04 14 14 16 03 01 01 13 08 12 

左右翻轉(zhuǎn)上下翻轉(zhuǎn)左上右下翻轉(zhuǎn)右上左下翻轉(zhuǎn)14 16 03 01 12 10 05 07 07 09 04 14 01 13 08 12 04 02 15 13 08 06 11 09 05 11 02 16 03 15 06 10 09 11 06 08 13 15 02 04 10 06 15 03 16 02 11 05 07 05 10 12 01 03 16 14 12 08 13 01 14 04 09 07 5.加值變形法正規(guī)魔方陣:首項是1,公差是1加值變形后的魔方陣:首項是a,公差是r 

原始魔方首項為5公差為1首項為5公差為2 14 16 03 01 18 20 07 05 31 35 09 05 04 02 15 13 08 06 19 17 11 07 33 29 09 11 06 08 13 15 10 12 21 25 15 19 07 05 10 12 11 09 14 16 17 13 23 27 

6.互補變形法就是將魔方陣中的每一個數(shù)字都替換成互補數(shù)的變形方式。在n階魔方陣中,數(shù)字k的互補數(shù)=(1+n*n)–k 

原始魔方陣互補變形魔方陣14 16 03 01 03 01 14 16 04 02 15 13 13 15 02 04 09 11 06 08 08 06 11 09 07 05 10 12 10 12 07 05 

7.田字變形法以中心點為準將魔方陣分成四個相等的小方陣。當n為奇數(shù)時,中央的行列要獨立出來。 

n是偶數(shù)時n是奇數(shù)時ABA A1 BDC? D1 E B1 D C1 C將魔方陣如下重組: CD ? C C1 D? BA B1 E D1 B A1 A 

可參考下面的范例:原始4階魔方陣4階田字變形魔方陣原始5階魔方陣5階田字變形魔方陣01 03 16 14 11 09 08 06 18 22 01 10 14 13 17 09 21 05 13 15 02 04 05 07 12 10 04 08 12 16 25 24 03 20 07 11 08 06 11 09 16 14 01 03 15 19 23 02 06 02 06 23 15 19 12 10 05 07 02 04 13 15 21 05 09 13 17 10 14 01 18 22 07 11 20 24 03 16 25 12 04 08 8.井字對換變形法(1)任選一數(shù)k,1<=k<=n 。 (2)將方陣的第k行和其互補行(第n+1-k行)對換。 (3)將方陣的第k列和其互補列(第n+1-k列)對換。 (4)為方便稱呼,此時姑且命名為k值井字對換變形。 

原始魔方陣1值井字對換魔方陣2值井字對換魔方陣1,2值井字對換魔方陣01 03 16 14 07 10 05 12 01 16 03 14 07 05 10 12 13 15 02 04 04 15 02 13 08 11 06 09 09 11 06 08 08 06 11 09 09 06 11 08 13 02 15 04 04 02 15 13 12 10 05 07 14 03 16 01 12 05 10 07 14 16 03 01 9.拓樸變形法( 1)任選不相等的兩數(shù)1<=k1,k2<=n,但當(n+1)/2為奇數(shù)時,k1及k2不能等于(n+1)/2。 (2)將座標含k1值的全改成k2。含k2值的全改成k1。含n+1-k1值的全改成n+1-k2。含n+1-k2值的全改成n+1-k1。 (3)為方便稱呼,此時姑且命名為k1,k2拓樸變形。 

可參考下面的3階1,3拓樸變形示意圖(1,1) (1,2) (1,3) (3,3) (3,2) (3,1) (2,1) (2 ,2) (2,3) (2,3) (2,2) (2,1) (3,1) (3,2) (3,3) (1,3) (1,2) (1 ,1) 

可參考下面的范例原始魔方陣1,2拓樸變形魔方陣18 22 01 10 14 08 04 12 25 16 04 08 12 16 25 22 18 01 14 10 15 19 23 02 06 19 15 23 06 02 21 05 09 13 17 11 07 20 03 24 07 11 20 24 03 05 21 09 17 13注:其實對換變形、田字變形可包含于拓樸變形中,只因想法不同故列出參考


三、奇數(shù)階魔方陣的建構(gòu)法

1.楊輝法發(fā)明者:楊輝適用:三階魔方陣方法:九子斜排,上下對易,左右相更,四維挺進

***1*** **4*2** 4 9 2 *7*5*3*  3 5 7 **8*6**  8 1 6 ***9*** 

楊輝法推廣-菱形法發(fā)明者:Bachet de Meziriac適用:奇數(shù)階魔方陣方法:數(shù)字斜排,上下對易,左右相更,四維挺進

********01******** ******06**02****** ? ? ? ****11**07**03*** * 11 24 07 20 03 **16**12**08**04** 04 12 25 08 16 21**17**13**09**05 17 05 13 21 09 **22**18* *14**10** 10 18 01 14 22 ****23**19**15**** ? 23 06 19 02 15 ******24**20****** * *******25******** 

2.簡捷連續(xù)填制法發(fā)明者:De La Loubere適用:奇數(shù)階魔方陣方法:1立首列中,右一上一,受阻下一

* * 1 * * * * 1 * * * * 1 * * * * 1 * * * * 1 8 * 17 24 1 8 15 * * * * * * * * * * * 5 * * * * 5 * * * * 5 7 * * 23 5 7 14 16 * * * * * * * * * * 4 * * * * 4 6 * * * 4 6 * * * 4 6 13 20 22 * * * * * * * * * * * * * * 3 * * * * 3 10 * * * 3 10 12 19 21 3 * * * * * * * * 2 * * * * 2 * * * * 2 * 11 * * 2 9 11 18 25 2 9簡捷連續(xù)填制法推廣適用:奇數(shù)階魔方陣方法: (1)1立首列中,右1上1,受阻下1; (2)1立中央上,右1下2,受阻上2; (3 )1立首行中,右2下1,受阻右1; (4)1立首列中,右1下2,受阻下4; (5)1立中央上,右1上1,受阻上2 ; (6)1立首行中,左1上1,受阻右1。 

3.輔助方陣法適用:五階以上奇數(shù)階魔方陣方法: (1)制作輔助方陣一:在左上端填入1,按照走馬的方式往右二下一的方向填入1至底,接著在每列的1的右邊依序填入2、3、4…n 1 * * * * 1 2 3 4 5 1 2 3 4 5 * * 1 * * * * 1 * * 4 5 1 2 3 * * * * 1 * * * * 1 2 3 4 5 1 * 1 * * * * 1 * * * 5 1 2 3 4 * * * 1 * * * * 1 * 3 4 5 1 2 (2)制作輔助方陣二:在左上端填入0,按照走馬的方式往右一下二的方向填入0至底,接著在每列的0的下面依序填入n、2n、3n…n(n-1) 0 * * * * 0 15 5 20 10 1 17 8 24 15 * * * 0 * 5 20 10 0 15 9 25 11 2 18 * 0 * * * 10 0 15 5 20 12 3 19 10 21 * * * * 0 15 5 20 10 0 20 6 22 13 4 * * 0 * * 20 10 0 15 5 23 14 5 16 7 (3)將輔助方陣一與二的對應(yīng)方格內(nèi)之數(shù)相加填到一個新的方陣對應(yīng)方格內(nèi),則新的方陣即為一個魔方陣。 

4.擴階法適用:n階魔方陣,n為大于5的正整數(shù)方法: (1)先建構(gòu)出一個n-2階的魔方陣(2)將(1)所建立的魔方陣每個數(shù)字再加上2n-2 (3)將步驟(2)的魔方陣外面再加上一圈,這一圈有4n-4個空格,填入的數(shù)為1~(2n-2)和( -2n+3)~n*n,先算出魔術(shù)數(shù)字會比較好填。 

8 1 6 16 09 14 23 01 02 20 19 3 5 7 11 13 15 22 16 09 14 04 4 9 2 12 17 10 05 11 13 15 21 08 12 17 10 18 07 25 24 06 03 5.方陣合成法適用:當魔方陣的階數(shù)n可分解成兩個大于2之整數(shù)p、q的乘積方法:假設(shè)A=[(a)ij]與B=[(b)ij]分別代表m階與n階魔方陣,對每個t=1,2…m*m,令A(yù)t=[(a)ij+m*m(t–1)]。接著我們將方陣B中的數(shù)t以m階魔方陣(A)t代替,就可以得到一個m. n階魔方陣。 

可參考下面的范例魔方陣A魔方陣B 35 28 33 26 19 24 71 64 69 8 1 6 4 3 8 30 32 34 21 23 25 66 68 70 3 5 7 9 5 1 31 36 29 22 27 20 67 72 65 4 9 2 2 7 6 80 73 78 44 37 42 08 01 06 75 77 79 39 41 43 03 05 07 A4 A3 A8 76 81 74 40 45 38 04 09 02 A9 A5 A1 17 10 15 62 55 60 53 46 51 A2 A7 A6 12 14 16 57 59 61 48 50 52 13 18 11 58 63 56 49 54 47 


四、偶數(shù)階魔方陣的建構(gòu)法

1、楊輝法發(fā)明者:楊輝適用:4階魔方陣方法:以十六子,依次遞作四行排列,先以外四子對換,一換十六、四換十三,以四內(nèi)角對換,六換十一、七換十,橫直上下斜角,皆三十四數(shù),對換止可施之于小。 

01 02 03 04 16 02 03 13 16 02 03 13 05 06 07 08 05 06 07 08 05 11 10 08 09 10 11 12 09 10 11 12 09 07 06 12 13 14 15 16 04 14 15 01 04 14 15 01 

楊輝法推廣-消去對角線法適用:四之倍數(shù)階魔方陣方法: (1)先將整個方陣劃分成k*k個4階方陣,然后在每個4階方陣的對角線上做記號( 2)由左而右、由上而下,遇到?jīng)]有記號的位置才填數(shù)字,但不管是否填入數(shù)字,每移動一格數(shù)字都要加1 (3)自右下角開始,由右而左、由下而上,遇到?jīng)]有數(shù)字的位置就填入數(shù)字,但每移動一格數(shù)字都要加1 

2.井字法適用:四之倍數(shù)階魔方陣方法: (1)把1~n*n從左上角依序填入方陣內(nèi)(2)用兩條鉛直線和兩條水平線將方陣分隔成四個角落各有一個n/4階的子方陣,和中心位置有一個n/2階的子方陣(3)以方陣中心為對稱點,將五個子方陣的數(shù)字作對稱交換,其它的數(shù)字不要動。這樣的方陣會是一個魔方陣

01 02 03 04 16 02 03 13 05 06 07 08 05 06 07 08 09 10 11 12 09 10 11 12 13 14 15 16 04 14 15 01 

3.輔助方陣法適用:偶數(shù)階魔方陣(因非四的倍數(shù)作法相當復(fù)雜,在此只介紹四的倍數(shù)的作法)方法: (1)制作輔助方陣一:第一列由左向右排列1至n,第二列由右向左排列1至n,第三列同第二列,第四列同第一列,若超過四列,重復(fù)一至四列的作法,完成輔助方陣一(2)制作輔助方陣二:將第一個輔助方陣各方格內(nèi)的數(shù)字x換成n(x-1),再做行列互換,完成輔助方陣二(3)將輔助方陣一與二的對應(yīng)方格內(nèi)之數(shù)相加填到一個新的方陣對應(yīng)方格內(nèi),則新的方陣即為一個魔方陣01 02 03 04 00 12 12 00 01 14 15 04 04 03 02 01 04 08 08 04 08 11 10 05 04 03 02 01 08 04 04 08 12 07 06 09 01 02 03 04 12 00 00 12 13 02 03 16 

4.擴階法同奇數(shù)階之作法

5.方陣合成法同奇數(shù)階之作法
----------------------------------------------------------------------------
具體做法:

方法一;

/*此程序使我按照上面介紹的魔方陣的規(guī)律編寫的,不過只能求奇數(shù)魔方陣,經(jīng)過測試可以算到508階*/
#define N 7
#include<stdio.h>
void main()
{
  int a[N][N],i,j,k;
  for(i=0;i<N;i++)    /*先處理第一行*/
    for(j=0;j<N;j++)
    {
      a[i][j]=0;     /*先令所有元素都為0*/
    }
      j=(N-1)/2;     /*判斷j的位置*/
      a[0][j]=1;    /*將1放在第一行中間一列*/
  for(k=2;k<=N*N;k++)    /*再從2開始處理*/
    {
      i=i-1;    /*存放的行比前一個數(shù)的行數(shù)減1*/
      j=j+1;    /*存放的列比前一個數(shù)的列數(shù)加1*/
      if((i<0)&&(j==N))    /*前一個數(shù)是第一行第N列時,把下一個數(shù)放在上一個數(shù)的下面*/
      {
        i=i+2;
        j=j-1;
      }
      else
      {
        if(i<0)    /*當行數(shù)減到第一行,返回到最后一行*/
        i=N-1;
        if(j>N-1)    /*當列數(shù)加到最后一行,返回到第一行*/
        j=0;
      }
      if(a[i][j]==0)     /*如果該元素為0,繼續(xù)執(zhí)行程序*/
        a[i][j]=k;
      else     /*如果該元素不為0,就說明要填的數(shù)的位置已經(jīng)被占,則該數(shù)放在上一個數(shù)的下面*/
      {
        i=i+2;
        j=j-1;
        a[i][j]=k;
      }
    }
    for(i=0;i<N;i++)    /*輸出數(shù)組*/
    {
      for(j=0;j<N;j++)
      printf("%5d",a[i][j]);
      printf("\n\n");
    }
  ---------------------------------------------------------------------
方法二:

/*這個是網(wǎng)友qfyzy為幫助我找錯而提供的,可以算到99階*/
#define N 7
#include<stdio.h>
void main()
{
    int a[N][N]={0},i=0,j,k;     /*先令所有元素都為0*/
      j=(N-1)/2; 
      i=0;
  for(k=1;k<=N*N;)    /*開始處理*/
    {
      if((i<0)&&(j==N))    /*前一個數(shù)是第一行第N列時,把下一個數(shù)放在上一個數(shù)的下面*/
      {
        i=i+2;
        j=j-1;
      }
      else  if(i<0)    /*當行數(shù)減到第一行,返回到最后一行*/
       i=N-1;
      else  if(j>N-1)    /*當列數(shù)加到最后一行,返回到第一行*/
        j=0;
      else  if(!a[i][j]){     /*如果該元素為0,繼續(xù)執(zhí)行程序*/
        a[i][j]=k++;         
        i=i-1;
        j=j+1;
      }
      else     /*如果該元素不為0,就說明要填的數(shù)的位置已經(jīng)被占,則該數(shù)放在上一個數(shù)的下面*/
      {
        i=i+2;
        j=j-1;
      }
    }
    for(i=0;i<N;i++)    /*輸出數(shù)組*/
    {
      for(j=0;j<N;j++)
      printf("%5d",a[i][j]);
      printf("\n\n");
    }
  } 
 TOP 
 
----------------------------------------------------------------------
方法三:

/*此程序是在網(wǎng)上找到的c程序設(shè)計習題7.7的答案,只能算奇數(shù)陣,可以算到15階*/
#include<stdio.h>
void main()
{int a[16][16],i,j,k,p,m,n;
p=1;
while(p==1)
   {printf("請輸入階數(shù):");    /*原答案沒有這個輸出語句*/
     scanf("%d",&n);
    if((n!=0)&&(n<=15)&&(n%2!=0))p=0;
   }
for(i=1;i<=n;i++)
   for(j=1;j<=n;j++)
     a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
   {i=i-1;
    j=j+1;
    if((i<1)&&(j>n))
      {i=i+2;
       j=j-1;
      }
    else
      {if(i<1)i=n;
       if(j>n)j=1;
      }
    if(a[i][j]==0)a[i][j]=k;
    else
      {i=i+2;
       j=j-1;
       a[i][j]=k;
      }
    }
for(i=1;i<=n;i++)
   {for(j=1;j<=n;j++)
      printf("%3d",a[i][j]);
    printf("\n");
   }

 TOP 
 
-------------------------------------------------------
方法七:

/*此程序可以運行到508階魔方陣*/
#define N (int)5    /*這里可以修改最大階*/
#include <stdio.h>
void main()
{
int i,k,c;
int m[N][N]={0};
i=0; k=N/2;

    for(c=1;c<=N*N;c++)

{
     if(m[i][k]!=0) 
     {
   
         i++;
         if(i>N-1)i=0;
          i++;
        if(i>N-1)i=0;

          k--;
        if(k<0)k=N-1;
      }

    m[i][k]=c;
        i--;k++;
    if(i<0)i=N-1;
    if(k>N-1)k=0;

}

printf(" %d 階魔方陣:\n\n",N);

for(i=0;i<N;i++)
{
   for(k=0;k<N;k++)
    printf("%4d",m[i][k]);
   printf("\n");
}

}
================================================================================================================
C實現(xiàn)代碼
#include "stdio.h"
#define N 100
void main()
{
int h,i,j,k,l,n,t;
int a[N][N];
while(1)
{
   for(i=0;i<N;i++)
    for(j=0;j<N;j++)
    a[i][j]=0;
   printf("Please Input a Number:");
   scanf("%d",&n);
   if(n==0)
    break;
   if(n<3||n>N)
    {
     printf("The Number You Iput Is Invalid! Please Try Again!\n");
     continue;
    }

   if(n%2==1)
   {
    for(i=0,j=n/2,k=1;k<=n*n;)
     {
      if(i<0) i=i+n;
      if(i>=n) i=i-n;
      if(j<0) j=j+n;
      if(j>=n)j=j-n;
      if(a[i][j]!=0)
      {i=i+2;j=j-1;continue;}
      a[i][j]=k++;i--;j++;
     }
   }

   if(n%4==0)
   {
    for(i=0,k=1;i<n;i++)
    {
     if(i<n/4||i>=3*n/4)
      for(j=0;j<n;j++)
       a[i][j]=k++;
     if(i>=n/4&&i<3*n/4)
      for(j=n-1;j>=0;j--)
       a[i][j]=k++;
    }
    for(j=n/4;j<3*n/4;j++)
     for(i=0;i<n/2;i++)
      {
       t=a[i][j];
       a[i][j]=a[n-1-i][j];
       a[n-1-i][j]=t;
      }
   }

   if(n%4==2)
    {
     t=0;k=1;
     while(++t)
      {
       if(t>4)break;
       if(t==1){h=0;l=0;}
       if(t==2){h=n/2;l=n/2;}
       if(t==3){h=0;l=n/2;}
       if(t==4){h=n/2;l=0;}
       for(i=h,j=l+n/4;k<=t*n*n/4;)
        {
         if(i<h)i=i+n/2;
         if(i>=h+n/2)i=i-n/2;
         if(j<l)j=j+n/2;
         if(j>=l+n/2)j=j-n/2;
         if(a[i][j]!=0)
         {i=i+2;j=j-1;continue;}
         a[i][j]=k++;i--;j++;
        }
      }
     for(j=0;j<n/4;j++)
      for(i=0;i<n/2;i++)
       {
        t=a[i][j];
        a[i][j]=a[i+n/2][j];
        a[i+n/2][j]=t;
       }
     for(j=3*n/4+2;j<n;j++)
      for(i=0;i<n/2;i++)
       {
        t=a[i][j];
        a[i][j]=a[i+n/2][j];
        a[i+n/2][j]=t;
       }
     t=a[n/4][0];
     a[n/4][0]=a[3*n/4][0];
     a[3*n/4][0]=t;
     t=a[n/4][n/4];
     a[n/4][n/4]=a[3*n/4][n/4];
     a[3*n/4][n/4]=t;
    }

   for(i=0;i<n;i++)
    {
     for(j=0;j<n;j++)
      printf("%-4d",a[i][j]);
     printf("\n");
    }
   }
}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多