C語言 | 輸出魔方矩陣
阿新 • • 發佈:2021-01-19
例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語言入門到精通