所謂幻方,就是乙個 n 行 n 列的正方形,當 n 為奇數時,稱為奇數階幻方。共有 n2 個格仔,將 1,2,3,…,n2 這些數字放到這些格仔裡,使其每行的和、每列的和及兩 條對角線的和都是乙個相同的數。試程式設計由鍵盤輸入乙個奇數 n,輸出乙個 n 階幻方;
解題思路:首先我們將主教材的演算法提示按步分解。
(1)定義乙個陣列 a[n][n]來儲存 n 階幻方,這裡 n 為奇數,陣列各元素的初值均為 0,
表示該位置上還沒有填數;
(2)用乙個整型變數 k 來表示當前要賦的數,按題意 k 將開始從 1 到 n2迴圈,因為 n
階幻方將有 n2 個數;
(3)定義整型變數 i,j 表示要賦值的行號和列標,i 初值為 0,j 初值為 n/2,表示第一
個數要放在第一行中間的那個格仔裡;
(4)填數字開始,k 開始迴圈,完成下面的(5)到(10);
(5)先將 k 賦到相應的位置,即將 a[i][j]賦為 k,再將 i,j 的值分別用整型變數 iold
和 jold 暫時儲存,注意是暫時;
(6)將 i 的值減 1,j 的值增 1,表示後乙個數放在這個數的右上格;
(7)如果 i<0 且 j=0,且 j>=n,即右上格從右面超出,則 j=0,表示後一數放到與右上格同
行的第一列;
(9)如果 i<0 且 j>=n,即右上格既從右面超出又從上面超出,則將後一數放在前一數
的下面,即 i=1,j=n-1;
(10)如果 a[i][j]>0,即右上格已被數字填充,則後一數放在前一數的下面,即 i=iold+1,
j=jold。
下列**思路與上述相同(後續優化版本)
#include
#include
intlaobo
(int n,
int*
*arr,
int num)
//勞伯法 用於計算奇數階的情況
else
}return0;
}int
init
(int n,
int*
*arr)
}return0;
}int
haier
(int n,
int*
*arr)
//被4整除時用該函式
}return0;
}int
late
(int n,
int*
*arr)
for(i =
0;i < deg;i++
)for
(j =
0;j < deg;j++
) a[i]
[j]=0;
laobo
(deg, a,
1+deg*deg)
;for
(i =
0;i < deg;i++
)//d象限賦值
for(j =
0;j < deg;j++
)for
(i =
0;i < deg;i++
)for
(j =
0;j < deg;j++
) a[i]
[j]=0;
laobo
(deg, a,1+
2*deg*deg)
;for
(i =
0;i < deg;i++
)//b象限賦值
for(j =
0;j < deg;j++
)for
(i =
0;i < deg;i++
)for
(j =
0;j < deg;j++
) a[i]
[j]=0;
laobo
(deg, a,1+
3*deg*deg)
;for
(i =
0;i < deg;i++
)//c象限賦值
for(j =
0;j < deg;j++
) k =
(n -2)
/4;for
(i =
0;i < deg;i++
)//實現了ac象限前k個數的交換
}for
(j =
0;j < k;j++
)//因為a象限中間行是從中間格開始換的
//所以我們要將前面替換了的前k格給替換回來
//替換中間格開始的k個
for(j = deg/
2;j <
((deg/2)
+ k)
;j++)if
(k !=0)
}free
(a);
return0;
}int
main()
else
if(n %4==
0)else
for(i =
0;i < n;i++
)printf
("\n");
}free
(arr)
;return0;
}
C語言檢驗並列印幻方矩陣
幻方矩陣是指該矩陣中每一行 每一列 每一對角線上的元素之和都是相等的。從鍵盤輸入乙個5 5的矩陣並將其存入乙個二維整型陣列中,檢驗其是否為幻方矩陣,並將其按指定格式顯示到螢幕上。輸入格式 d 輸出格式 如果是幻方矩陣,輸出提示資訊 it is a magic square n 矩陣元素的輸出 4d ...
MATLAB 矩陣與幻方矩陣
關於矩陣 在 matlab 環境中,矩陣是由數字組成的矩形陣列。有時,1 1 矩陣 即標量 和只包含一行或一列的矩陣 即向量 會附加特殊含義。matlab 採用其他方法來儲存數值資料和非數值資料,但剛開始時,通常最好將一切內容都視為矩陣。matlab 旨在盡可能簡化運算。其他程式語言一次只能處理乙個...
840 矩陣中的幻方
3 x 3 的幻方是乙個填充有從 1 到 9的不同數字的 3 x 3 矩陣,其中每行,每列以及兩條對角線上的各數之和都相等。給定乙個由整數組成的grid,其中有多少個 3 3 的 幻方 子矩陣?每個子矩陣都是連續的 示例 輸入 4,3,8,4 9,5,1,9 2,7,6,2 輸出 1解釋 下面的子矩...