1. 程式人生 > 其它 >C語言 | 輸出魔方矩陣

C語言 | 輸出魔方矩陣

技術標籤:C語言案例原始碼c語言

例63:C語言實現輸出“魔方陣”。所謂魔方陣是指它的每一行,每一列和對角線之和均相等。

解題思路:魔方陣中各數的排列規律,魔方陣的階數應該為奇數。

將1放在第1行中間一列
從2開始直到n*n止各數依次按下:每一個數存放的行比前一個數的行數減1,列數加1.
如果上一數的行為為1,則下一個數的行數為n
當上一個數的列數為n時,下一個數的列數應為1,行數減1
按上面的規則確定的位置上已有數,或上一個數是第1行第n列時,則把下一個數放在上一個數的下面

原始碼演示:

#include<stdio.h>//標頭檔案 
int main()//主函式 
{
        int
a[20][20]={0};//定義二維陣列 int i,j,n,k; //定義整型變數 i=1;//賦值 printf("請輸入階數為1~15之間的奇數:\n");//提示語句 scanf("%d",&n);//輸入魔方陣的維度n j=n/2+1; // j是維度的一半加1. a[i][j]=1; //確定第一排的中間一個數為1 for(k=2;k<=n*n;k++)//已經確定1的位置了,再迴圈確定2~n*n的位置 { i=
i-1; //挪位,豎排往上挪一位。 j=j+1; //挪位,橫排往右挪一位。 if((i<=0)&&(j<=n)) //如果豎排挪到頂,同時橫排還沒有超過最右,豎排就到從最下再繼續。 { i=n; } if((i<=0)&&(j>n)) //如果豎排挪到頂,同時橫排超過最右,豎排往下挪兩位,橫排往左移一位。 { i=i+2; j=
j-1; } if(j>n) //如果只有橫排超過最右,橫排挪到左邊第二行。 { j=1; } if(a[i][j]==0) { a[i][j]=k; //如果這個位置還沒有賦值,那麼賦值為k。 } else //已經賦值過了。那麼豎排往下挪兩位,橫排往左移一位,再賦值為k。 { 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");//換行 } }

編譯執行結果如下:

請輸入階數為1~15之間的奇數:
3
  8   1   6
  3   5   7
  4   9   2

--------------------------------
Process exited after 1.327 seconds with return value 3
請按任意鍵繼續. . .

以上,如果你看了覺得對你有所幫助,就給小林點個贊,分享給身邊的人叭,這樣小林也有更新下去的動力,跪謝各位父老鄉親啦~

C語言輸出魔方矩陣
更多案例可以go公眾號:C語言入門到精通