• 締切済み

n(nは奇数)次の魔方陣

奇数nに対してn次の魔方陣を作るプログラムを、誰か教えてください。

みんなの回答

  • bir
  • ベストアンサー率44% (11/25)
回答No.1

参考URLのあたりで探してみてください。 アドバイスですみません。

参考URL:
http://peacock.pse.che.tohoku.ac.jp/~msuzuki/magicsquare-j.html

関連するQ&A

  • ラテン方陣と魔方陣

    魔方陣について、縦と横の和が同じで(斜めは考えない)、すべての数が一回ずつしか現れないものとします。ラテン方陣という縦の各列も横の各列も同じ数字が一回しか現れないものと定義づけます。このラテン方陣は作り方により2種類にわかれ、この2種のラテン方陣を組み合わせた方陣をオイラー方陣と名づけます。たとえば、3×3のラテン方陣は 123   123         312 と 231         231   312 となり、これを組み合わせた3次のオイラー方陣は       (1,1)(2,2)(3,3)       (3,2)(1,3)(2,1)       (2,3)(3,1)(1,2) となります。 これらの定義条件下において次の定理を証明してほしいのですが。 定理. n×nの二つのラテン方陣からできるオイラー方陣にお いて、nが奇数ならば、(1,1)、(1,2)、・・・(n,n)のすべての組が方陣内にちょうど一回ずつ現れる。 どうかよろしくお願いしますm(__)m       

  • 奇数魔方陣

    下記のプログラム(奇数魔方陣) について最初のfor文からどのような処理が行われているかわかりません。 { int mahoujin[10][10],x,y,i,n = 7; x = n / 2 + 1; y = 1; mahoujin[x][y] = 1; for( i = 2; i <= n * n; i++ ){ if( i % n == 1 ){ y = y + 1; }else{ x = x + 1; y = y - 1; } if( x > n ) x = 1; if( y < 1 ) y = n; mahoujin[x][y] = i; } for( y = 1; y <= n; y++ ){ for( x = 1; x <= n; x++ ){ printf( "%3d ", mahoujin[x][y] ); } printf( "\n" ); } 特にわからないのがif文で分岐になるところどのようなことが行われているかがわからないです。どなたか教えて頂けるとうれしいです。

  • 魔方陣

    上辺中央から始めて右上斜に進みつつ、縁を越えたときは対辺に飛び、既に埋まった目に当たったときは下に逃げる。この方法で奇数字の魔方陣が生成されることの証明を御教示ねがえませんでしょうか。粗筋だけでも結構です。

  • 普遍的な魔方陣はありますか。

    各行・各列の和が一定の値になる、整数魔方陣、有理数魔方陣、実数魔方陣、複素数魔方陣、多元数魔方陣は、有り得ますか。

  • 魔方陣の歴史

    2度目ですいません・・・。 魔方陣について調べることになったのですが、「魔方陣の歴史」について調べるんですが、魔方陣の歴史のことで何か知っていますか?よろしかったら教えて下さい。

  • 配列を使って魔方陣

    C言語を使って最近やっと配列ができるようになってきたんですが、どうしても魔方陣のやり方がわからないんです。教えてください。 魔方陣とは、1~n^2までの整数をn×nの正方形に並べ、どの行、どの列、どの対角線のn個の数の和も一定の値になるようにしたものです。 nは常に奇数を入力し、1番上の行の中央の列に1を置く事になります。 整数kまで置かれているとすると、k+1は次のように置かれる。 * kの置かれた場所の右斜め上(以下この場所をαと呼ぶ)が空いていれば、そこにk+1を置く。 * αがすでに他の数が置かれているとき、kの置かれている場所のすぐ下にk+1を置く。 * αが右上隅にはみ出す場合は、kの置かれている場所のすぐ下にk+1を置く。 * αが1番上の行からはみ出す場合は、場所αの1番下の列にk+1を置く。 * αが1番右上の列からはみ出す場合には、場所αの1番左の列にk+1を置く。 例)n=3のとき 8 1 6 3 5 7 4 9 2 まだまだ初心者なので詳しく教えていただけると嬉しいです。よろしくお願いします。

  • n次の奇数魔方陣をつくるプログラム

    どうしてもエラーが出てしまいます。少なくとも、「int mahojin[n+1][n+1],i,j,k;」あたりの行が間違っているらしいのですが、なぜだかわかりません。アドバイスお願いします!!(スペースが上手く入らなくて、全角スペースを使ってますが気にしないでください。) #include<stdio.h> int main(void) {  int n;  printf("n(ただし、nは奇数)=?");scanf("%d",&n);  int mahojin[n+1][n+1],i,j,k;  j=(n+2)/2;i=0;  for(k=1;k<=n*n;k++){     if((k%n)==1)      i++;     else {      i--;j++;     }     if(i==0)      i=n;     if(j>n)      j=1;     mahojin[i][j]=k;   }   printf(" %d次の魔方陣 \n",n);   for(i=1;i<=n;i++){     for(j=1;j<=n;j++)      printf("%4d",mahojin[i][j]);     printf("\n");   }   return 0; }

  • 立体の魔方陣について

    「魔方陣」で「立体の魔方陣」って知ってますか? 知っていたら、なんでも良いので教えて下さい。お願いします。

  • この魔方陣の解き方教えてください。

    5×5マスの魔方陣で □ 24 □ 8 □ □ 5 □ 14 16 4 □ □ 20 □ □ □ □ □ □ 11 □ 25 □ 9 □の中の数を求めるものです いろいろ考えましたがわかりませんでした。 解き方含めおしえてください おねがいします

  • 円魔方陣

    円魔方陣の解き方を教えて下さい。 3×3や5×5などのとき方は載っているのですが、円魔方陣の解き方を教えて下さい。 よろしくお願いします。>_<

専門家に質問してみよう