輸出魔方矩陣(C語言實現)

2021-09-29 19:09:49 字數 3059 閱讀 6482

題目:

輸出魔方陣,所謂魔方陣是指這樣的方陣,它的每一行,每一列和對角線的和均相等,要輸出1-n^2個自然數構成的魔方陣,例如

8 1 6

3 5 7

4 9 2

解決方案

當n<=2時不存在魔方矩陣

if

(n<3)

當n為奇數時,可用「羅泊法」即

⑴將1放在第一行中間一列;

⑵從2開始直到n×n止各數依次按下列規則存放;每乙個數存放的行比前乙個數的行數減1,列數加1(例如上面的三階魔方陣,5在4的上一行後一列);

⑶如果上乙個數的行數為1,則下乙個數的行數為n(指最下一行);例如1在第一行,則2應放在最下一行,列數同樣加1;

⑷當上乙個數的列數為n時,下乙個數的列數應為1,行數減去1。例如2在第3行最後一列,則3應放在第二行第一列;

⑸如果按上面規則確定的位置上已有數,或上乙個數是第一行第n列時,則把下乙個數放在上乙個數的下面。例如按上面的規定,4應該放在第1行第2列,但該位置已經被佔據,所以4就放在3的下面。

if

(n%2==1

) a[i]

[j]=count++;}

}

3.當n為偶數時,又分為兩種情況,即n能否被4整除

當n能被4整除時,方案如下

(1) 先將整個方陣劃分成k*k個4階方陣,然後在每個4階方陣的對角線上做記號;

(2) 由左而右、由上而下,遇到沒有記號的位置才填數字,但不管是否填入數字,每移動一格數字都要加1;

(3) 自右下角開始,由右而左、由下而上,遇到沒有數字的位置就填入數字,但每移動一格數字都要加1。

if

(n%4==0

)int count=1;

for(

int i=

0;i)for

(int j=

0;j(a[i]

[j]==0)

a[i]

[j]=count++

;for

(int i=n-

1;i>=

0;i--

)for

(int j=n-

1;j>=

0;j--)if

(a[i]

[j]==-1

) a[i]

[j]=count++

;}

當n不能被4整除時,方案如下

填製魔方陣時,先將整個方陣劃成田字型的四個2 k + 1階的奇數階小方陣,並以下法做註記:

(1)右半兩個小方陣中大於k+2的列;

(2)左半兩個小方陣中( k + 1 , k + 1 )的格位;

(3)左半兩個小方陣中除了( k+1 , 1 )是指第一列第k+1行的格位之外,小於k +1的列。

以奇數階魔方陣的方法連續填製法依左上、右下、右上、左下的順序分別填製這四個小方陣。將上半及下半方陣中有註記的數字對調,魔方陣完成。

if

(n%4==2

) a[i+x]

[j+y]

=count++;}

switch

(sym)

}int k=

(n-2)/

4;for(

int j=num+k+

2;jint temp=a[k]

[k]; a[k]

[k]=a[k+num]

[k]; a[k+num]

[k]=temp;

//2for

(int j=

0;j)for

(int i=

0;i(i!=k)

}

執行結果如下n=10

完整**示例

void

function4

(int n)

if(n%2==

1)a[i]

[j]=count++;}

}if(n%4==0

)int count=1;

for(

int i=

0;i)for

(int j=

0;j(a[i]

[j]==0)

a[i]

[j]=count++

;for

(int i=n-

1;i>=

0;i--

)for

(int j=n-

1;j>=

0;j--)if

(a[i]

[j]==-1

) a[i]

[j]=count++;}

if(n%4==

2)a[i+x]

[j+y]

=count++;}

switch

(sym)

}int k=

(n-2)/

4;for(

int j=num+k+

2;jint temp=a[k]

[k]; a[k]

[k]=a[k+num]

[k]; a[k+num]

[k]=temp;

//2for

(int j=

0;j)for

(int i=

0;i(i!=k)

}for

(int i=

0;i)}

C語言 輸出「魔方陣」

本程式要輸出魔方陣,魔方陣如下 1 8 1 6 2 17 24 1 8 15 3 5 7 23 5 7 14 16 4 9 2 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 了解題可知 1.第一行中間一列的值為1。所以用j n 2 1確定1的列數,得出a 1 j 1...

C語言實現矩陣相乘

介紹了c語言實現矩陣相乘的常見演算法,並考慮優化程式,提高效能介紹了改進的演算法。1.矩陣相乘 矩陣相乘應滿足的條件 1 矩陣a的列數必須等於矩陣b的行數,矩陣a與矩陣b才能相乘 2 矩陣c的行數等於矩陣a的行數,矩陣c的列數等於矩陣b的列數 3 矩陣c中第i行第j列的元素等於矩陣a的第i行元素與矩...

C語言實現矩陣相乘

分析 首先我們可以根據題意寫出函式頭。可以定為void matrixmutiply int m,int n,int p,long lmatrix1 max max long lmatrix2 max max long lmatrixresult max max 其中lmatrix1和lmatrix2...