Wolfram Mathematica で魔方陣の関数を作成する方法を教えてください。関数 MagicSquare[n_] を作成する必要があります。この出力は、最初の n^2 整数の正方行列であり、すべての列、すべての行、および対角線上のこれらの整数の合計は同じでなければなりません。私を助けてください、私はこれを数日間試しましたが、失敗しました。学校の課題でこれが必要です。
2 に答える
0
これは単純なブルートフォース アプローチです。チェック値m
はマジック定数であることに注意してください。
(ランダムな値を配列変数に設定すると、 がうまく利用されますHoldFirst
。)
n = 3;
m = n (n^2 + 1)/2;
check = {0};
While[Unequal[Union[check], {m}],
Clear[s];
x = Table[s[i, j], {i, 1, n}, {j, 1, n}];
d1 = Diagonal[x];
d2 = Diagonal[Reverse[x]];
cols = Transpose[x];
vars = Flatten[x];
rand = RandomSample[Range[n^2], n^2];
MapThread[Function[{v, r}, v = r, HoldFirst], {vars, rand}];
check = Total /@ Join[x, cols, {d1, d2}]];
MatrixForm[x]
8 3 4
1 5 9
6 7 2
于 2014-02-28T15:40:57.337 に答える