• ベストアンサー

クイズです。4×4の16マスに1~16の数字を入れて…

4×4の16マスに1~16の数字を入れて…、縦(4行)、横(4列)、斜め(2)それぞれの計が34になるような1~16(重複不可)の組み合わせを教えて下さい。 ついでに答えだけでなく、次のお願いにも回答お願いします。 1.論理的に回答を導かせる根拠があればその提示もお願いします。 2.5×5、6×6とか拡張していっても同じロジックで解明できるのでしょうか? 3.コンピュータで回答を求めるとしたらどんなやり方がよいのか?(すべての組み合わせを調べて、計が同じになる組み合わせを回答させる以外のもの) ABCD EFGH IJKL MNOP A+B+C+D=E+F+G+H=I+J+K+L=M+N+O+P=34 A+E+I+M=B+F+J+N=C+G+K+O=D+H+L+P=34 A+F+K+L=D+G+J+M=34 A~Pは重複しない1~16ってことです。 P.S お馬鹿な質問?:(1+16)*2=34はこの回答に関係あるのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kitayou
  • ベストアンサー率27% (27/97)
回答No.1

これは、魔方陣というものです。小学校4年生の算数の授業で扱っている教科書もあります。 具体的な組み合わせ、理論的証拠については以下のURLを参照してください。

参考URL:
http://www1.mint.or.jp/~mrmtf/mahkan.htm
ele
質問者

お礼

土日も仕事だったためお礼が送れて申し訳ありません。 3の倍数(奇数)、4の倍数、4の倍数以外の偶数倍数ととりあえず解法は判りました。どうやってそこにたどり着くかがいまいち理解できてませんが。 7×7とか11×11はできないのかどうかとかあらたな疑問も沸いてしまいました。 とりあえず、エロエロエッサイムと呪文を唱えて煙に巻くこととします。 回答ありがとうございます。直リンよりそこのホームページすべてが役に立ちそうです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.3

>P.S お馬鹿な質問?:(1+16)*2=34はこの回答に関係あるのでしょうか? これについてのみ回答します。 NxNのマスで条件を満たすためには、各行または列の合計(S)は、 S=(1~N^2の合計)/N になることは簡単にわかりますよね。従って、 S=N^2(N^2+1)/2/N から N=4なら S=16*(16+1)/2/4 =2*(16+1) となります。 その後は、どうするんでしょう。次の方にタッチします。

ele
質問者

お礼

お馬鹿な質問にまでお付き合いくださってありがとうございます。 ただ、↓のURL見る限りでは合計(S)を導き出すためだけで、魔方陣を完成させるためには直接関係ないようですね。正しいかチェックするためだけ? わざわざ回答ありがとうございます。 魔法の呪文も思いつかなくなってきましたので、(テクマクマヤコンは変身の呪文だし…。)シャランラ!と色気を振りまいてお礼に代えさせていただきます。

ele
質問者

補足

自分としては小学校4年生の問題が回答に到っても充分に説明できないことにいまだ納得できないのですが、私の灰色の脳細胞(もしかすると燃え尽きて真っ白か、既に破壊されていてどす黒いのかも知れませんが)が理解できる範囲での回答に対する評価とします。 お馬鹿な質問にまで回答くださった、MovingWalkさんすいません。座布団用意してお待ちしていますので、次回も回答よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • hajime40
  • ベストアンサー率38% (192/498)
回答No.2

これはいわゆる魔法陣というものですね。 作り方は、偶数×偶数のものと、奇数×奇数のものとで、若干違うようですね。 詳しくは、下記のHPをご覧ください。魔法陣の作り方も書いてありますよ。 参考にしてみてくださいね。

参考URL:
http://www.e-t.ed.jp/edotori41/shiryou5.htm
ele
質問者

お礼

土日も仕事だったためお礼が送れて申し訳ありません。 並べてずらすというやり方は参考になりました。ただ、どうしてそうするのかが私には理解できないのですが。 悪魔が出てきても困るので、マハリクマハリク…と呪文を唱えてごまかすこととします。 回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 20名で1対1で話し合う研修を6回でやる方法

    20名で行う研修で1対1で話し合う研修を合計6回でやろうとしています。 10人が誰かと話し合い、合計59組の組み合わせを6回の間で やる方法がどうしてもわかりません。 どなたか教えてください。 ちなみに組み合わせは決まっており(以下のとおりです)その組み合わせを6回以内に効率よくやりたいと思ってます。 ちなみに3回まではアナログ的なやり方で10組ずつ話し合える組み合わせはわかったのですが、 それ以降が頭がぐちゃぐちゃになってわかりません。 組み合わせは以下のとおりです。 AさんとGさん、BさんとJさん、CさんとMさん、LさんとEさん、PさんとQさん、IさんとNさん、GさんとRさん、GさんとSさん、LさんとFさん、 MさんとOさん、TさんとNさん、DさんとEさん、EさんとSさん、AさんとTさん、BさんとHさん、CさんとFさん、JさんとTさん、HさんとMさん、 FさんとQさん、TさんとOさん、AさんとNさん、BさんとEさん、CさんとKさん、JさんとKさん、HさんとKさん、DさんとTさん、IさんとOさん、 GさんとPさん、LさんとNさん、MさんとPさん、EさんとQさん、AさんとSさん、BさんとPさん、CさんとOさん、JさんとPさん、HさんとSさん、 DさんとKさん、IさんとPさん、LさんとSさん、AさんとRさん、BさんとRさん、CさんとQさん、JさんとRさん、HさんとRさん、DさんとSさん、 IさんとQさん、LさんとOさん、BさんとQさん、DさんとOさん、LさんとRさん、JさんとMさん、HさんとIさん、DさんとGさん、IさんとKさん、 GさんとFさん、MさんとNさん、EさんとFさん、FさんとTさん、KさんとNさん の計59通りです。 お力添え何卒よろしくお願いしますm(_ _)m この回答とプラスその算出方法も合わせて教えていただけると幸いです。

  • 同じ数字を見つける方法

    どなたかご存じでしたらご回答よろしくお願いします。 【質問】  エクセルシートA列~F列に数字が入っています。  A列の数字がG列~L列迄の数字のいずれかと同じ値の場合、  M列~R列に一致した値を出力する。これをF列まで繰り返し行う方法が知りたいです。  ◎エクセルシート A B C  D E  F  G  H  I  J  K  L  M  N O P Q R    4 19 20  27 28 14  5  15 18 20  23 28  20 28     5  9 15 19 30  9  5  9  18 22  24 25  5  9  <= A列~F列で9が重複     5  7 17  25 27 18  5  14 18 23  29 31  5  18  2  3 5 14 24  9   5  9 16  22  29 30  5  9   6 12 21 24 28 15  4  5  11 20  26 29    6  8 9 21 26  4   4  8  13 19  26 27  4  8  26 ●注意事項   ・”数字”とは1~31迄の数字の事です。   ・A列~F列の数字は重複する場合があります。   ・A列~F列の数字がG列~L列に存在しない場合があります。    その場合のM列~R列は空白です。   ・使用するエクセルは2010です。 以上、よろしくお願いします。

  • JavaScriptの配列について

    var old_array = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); var new_array = Array('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); のような配列があり、 abcと入力するとbcd DEFと入力するとEFG 012と入力すると!23 というようなものを作りたいのですがどうすればいいでしょうか。

  • 多次元配列の初期化

    多次元配列の初期化を行いたいのですが、 下記の方法では、配列の値が多くなったときに大変 なので他に良い方法はありませんでしょうか? char lesson[7][6] = { {'A', 'B', 'C', 'D', 'E', 'F'}, {'G', 'H', 'I', 'J', 'K', 'L'}, {'M', 'N', 'O', 'P', 'Q', 'R'}, {'S', 'T', 'U', 'V', 'W', 'X'}, {'Y', 'Z', 'a', 'b', 'c', 'd'}, {'e', 'f', 'g', 'h', 'i', 'j'}, {'k', 'l', 'm', 'n', 'o', 'p'}, };

  • C言語の配列の使い方について質問です。

    以下のプログラムを配列を使って見やすくしたいのですが、どのように作ったら良いでしょうか? 宜しくお願いします。 #include<stdio.h> int main(void) { int a, b, c, d, e, f, g, h, i, j, k, l, m ,n, o; /*5段目の処理*/ for(a = 1; a <= 15; a++) { for(b = 1; b <= 15; b++) { if(a == b) continue; for(c = 1; c <= 15; c++) { if(a == c || b == c) continue; for(d = 1; d <= 15; d++) { if(a == d || b == d || c == d) continue; for(e = 1; e <= 15; e++) { if(a == e || b == e || c == e || d == e) continue; // printf("%d %d %d %d %d\n", a, b, c, d, e); ////4段目//// if(a>b){ f=a-b; } else if(a<b){ f=b-a; } if(b>c){ g=b-c; } else if(b<c){ g=c-b; } if(c>d){ h=c-d; } else if(c<d){ h=d-c; } if(d>e){ i=d-e; } else if(e<d){ i=e-d; } // printf(" %d %d %d %d \n", f, g, h, i); /////3段目//// if(f>g){ j=f-g; } else if(f<g){ j=g-f; } if(g>h){ k=g-h; } else if(g<h){ k=h-g; } if(h>i){ l=h-i; } else if(h<i){ l=i-h; } // printf(" %d %d %d \n", j, k, l); /////2段目//// if(j>k){ m=j-k; } else if(j<k){ m=k-j; } if(k>l){ n=k-l; } else if(k<l){ n=l-k; } // printf(" %d %d \n", m, n); /////三段目///// if(m>n){ o=m-n; } else if(m<n){ o=n-m; } // printf(" %d \n", o); if(a != b != c != d != e != f != g != h != i != j != k != l != m != n != o){ printf("%d %d %d %d %d\n", a, b, c, d, e); printf(" %d %d %d %d \n", f, g, h, i); printf(" %d %d %d \n", j, k, l); printf(" %d %d \n", m, n); printf(" %d \n", o); } } } } } } }

  • 文字化けしたメールの解読

    受信したメールが文字化けしてしまい読めません・・・ 分かる方、解読お願いします! :!"M%$7$/$J$l$P6/$/$J$k$N$HF1$8$@$H9M$($k$h$&$K!#$9$G$K:L;R$OM%$7$/$J$C$F$$$k$3$H$H;d$O;W$C$F$$$^$9!#4hD%$l:L;R!#%P%$%P%$

  • 難解なエクセル集計の仕方を教えてください!!

    以下のように集計したいのですが、いい方法はありませんか? 解りにくいですが、宜しくお願いします!!! ------------------------ 【関係図】  (1)(2)という2つグループの関係を表しています。  組織図のようなものと思ってくださって結構です。 ■元データ 【表あ】  関係図を分解し、2つごとの関係に直したデータです。   【表い】  それぞれA-Oに対応する数字が入っています。 ■集計要望 【表あ】と【表い】ふたつのデータを元に、関係図に基づいた集計をしたい。 例: 1.Aを集計すると、Aの下位のものはすべて集計したい。(A~Gまでの集計) 2.Dを集計すると、Dの下位のみが集計されるようにしたい。(D+E+F+G) 3.Fを集計すると、Fの下位のみ集計したい。(F+G) 4. Iを集計=I+K、Jを集計=J+L+M+N+O 【関係図】  (1)A-B-C      D-E       F-G  (2)H-I-K     J-L-M       N-O 【表あ】  A ― B  B ― C  B ― D  D ― E  D ― F  F ― G  H ― I  I ― K  H ― J  J ― L  L ― M  L ― N  N ― O 【表い】 A=1 B=2 C=4 D=5 E=6 F=7 G=8 H=9 I=10 J=11 K=12 L=13 M=14 N=15 O=16

  • 4つの数字を用いて重複することなく並べる

    題名のとおりなのですが 例えば{1,2,3,4},{2,3,4,1}などです。 これら24通りを[24][4]の要素をもつ2次元配列に入れたいのですがどうすればいいのでしょうか? 一応自分で作ってみたのですが作ってみていかにも冗長であると感じています。 アドバイス、回答よろしくお願いします。 #include <stdio.h> int main(void){ int i,j,n=5,m,p; int l[24][4]={{1,2,3,4},{2,1,3,4},{2,3,1,4},{3,2,1,4},{3,2,4,1},{4,2,3,1}}; for(i=0;i<6;i++){ for(j=0;j<3;j++){ n++; if(!j)for(p=0;p<4;p++)l[n][p]=l[i][p];     else for(p=0;p<4;p++)l[n][p]=l[n-1][p]; m=l[n][0]; l[n][0]=l[n][1]; l[n][1]=l[n][2]; l[n][2]=l[n][3]; l[n][3]=m; } } for(i=0;i<24;i++){ for(j=0;j<4;j++){ printf("%d",l[i][j]); } printf("\n"); } return 0; }

  • このクイズわかりますか??

    A+D=3 F+N+A=4 J×S+F=4 J×A×M+F=? ?に入る数字は何か?という問題です。 正解は知ってるんですが何故そうなるかわからなくて気になってしょうがないです!! 正解が解る方、なぜそうなるか教えてください;; 因みに正解は................「13」です。

  • エクセル 複数範囲から重複する数字を抽出

    エクセルで複数の範囲すべてに同じ数字があった場合、その数字を抽出することは出来ますか? 例:A1| B1 C1 D1 E1|F1 G1 H1 I1|J1 K1 L1 M1| N1 O1 P1 Q1| (1) B1~E1=(20 50 60) (2) F1~I1=(20 50 60) (3) J1~M1=(20 60) (4) N1~Q1=(20 50 80 ) (1)B1~E1、(2)F1~I1、(3)J1~M1、(4)N1~Q1の4つの範囲すべてに入っているのは、”20”になります。 A1に”20”と出したいのですが、どうしたら良いでしょうか。 どうぞよろしくお願いします。