| パズル(1):魔方陣の作り方 NSZAK HomePage!/Other/pazle-1 |
| 面白いパズルに関する雑記(更新、Jul. 1, 99) |
| |Return| |
◆魔方陣のとは
魔方陣とは、正方形升に数字を埋め込むと、縦・横・斜め(対角)の数字の合計が全て同じとなる組み合わせ
を言います。なかなか面白いでしょう。3x3程度なら、5x5程度なら辛抱すればできるが、それ以上ではちょっと大変。
そこで、そんなものを作る方法をお教えしましょう。
◆魔方陣の作り方(奇数サイズ)
| 魔方陣の作り方は、以下のルールでつくれます。 右図の様な5行、5列の碁盤のますを想定すると、
できた魔方陣の各要素は、同じ数を加算、減算、乗算、除算して も成立、小数、負の数などでも可能、当然ですね。 |
![]() |
◆ここをクリックすると実行例が見れるよ(ちょっと時間がかかる,1、2秒)
◆具体的なプログラムサンプル(JavaScriptです)
-----------ここから切り取ってxx.htmファイルとして保全して動くよ-----------
<SCRIPT language="JavaScript">
<!-- 配列関数と2次元配列を1次元配列に添え字変換関数定義
function MakeArray(n){
this.length=n;
}
function idx(i,j,n){
ij=(i-1)*n+j;
return ij;
}
// -->
</SCRIPT>
<SCRIPT language="JavaScript">
<!-- 魔方陣計算の本体、関数としている
function mahojin(n){
nn=n*n;
document.write("<h2> nn=",nn,"<br></h2>");
var a=new MakeArray(nn);
for(jj=1; jj<=nn; jj++){
a[jj]=0;
}
i=1; j=Math.ceil((n+1)/2);
id=idx(i,j,n);
a[id]=1;
document.write("@<br>")
for(m=2; m<=nn; m++){
ii=i; jj=j; mm=m;
flg=0;
///左下が配置可能///
if(i-1>0 && j-1>0 && flg==0){
id=idx(i-1,j-1,n);
if(a[id]<1){
i=i-1; j=j-1;
id=idx(i,j,n);
a[id]=m; flg=1;
}
///左下が配置不可///
else {
i=i+1;
id=idx(i,j,n);
a[id]=m; flg=1;
}
}
///左枠が欄外///
if(i-1>0 && j-1<1 && flg==0){
id=idx(i-1,n,n);
if( a[id]<1 ){
i=i-1; j=n;
id=idx(i,j,n);
a[id]=m; flg=1;
}
}
///下枠が欄外///
if(i-1<1 && j-1>0 && flg==0){
id=idx(n,j-1,n);
if(a[id]<1){
i=n; j=j-1;
id=idx(i,j,n);
a[id]=m; flg=1;
}
}
///左枠および下枠が欄外///
if(i-1<1 && j-1<1 && flg==0){
id=idx(i+1,j,n);
if(a[id]<1){
i=i+1;
id=idx(i,j,n);
a[id]=m; flg=1;
}
}
}
///魔方陣の表示///
document.write("<table border>");
for(i=n; i>0; i=i-1){
document.write("<tr>");
for(j=1; j<=n; j=j+1){
id=idx(i,j,n);
document.write("<td><h2><font color=blue>",a[id],"</h2></td></font>");
}
document.write("</tr>");
}
document.write("</table><p>");
}
///上記関数を使い複数枠の大きさに対して表示///
document.write("<table border><tr>");
document.write("<td><h2><font color=green>魔方陣 n=3*3</font></h2></td>");
document.write("<td><h2><font color=green>魔方陣 n=5*5</font></h2></td>");
document.write("<td><h2><font color=green>魔方陣 n=7*7</font></h2></td>");
document.write("</tr><tr><td>");
mahojin(3);
document.write("</td><td>");
mahojin(5);
document.write("</td><td>");
mahojin(7);
document.write("</td></tr></table>");
// -->
</SCRIPT>
--------------------ここまで----------------