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語言入門到精通

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章