この演習を解決するアルゴリズムを作成する必要があります。何か提案はありますか?
エクササイズ:
自然数を持つ nxm の正方形に分割された長方形があります。この四角形の中にある魔方陣の数を数える関数を書いてください。
魔方陣は、kxk (k>=2) の数字 (通常は整数) を正方形のグリッドに配置したもので、各行と各列の数字、および主対角線と副対角線の数字をすべて合計すると、同じ数。
この演習を解決するアルゴリズムを作成する必要があります。何か提案はありますか?
エクササイズ:
自然数を持つ nxm の正方形に分割された長方形があります。この四角形の中にある魔方陣の数を数える関数を書いてください。
魔方陣は、kxk (k>=2) の数字 (通常は整数) を正方形のグリッドに配置したもので、各行と各列の数字、および主対角線と副対角線の数字をすべて合計すると、同じ数。
4 つの配列を作成します。
1: すべての要素は、元の配列の要素 + 1 つ左です。
2: すべての要素は、元の配列の要素 + 1 つ上にあります。
3: すべての要素は、元の配列の要素 + 左上に 1 つです。
4: すべての要素は、元の配列の要素 + 右上に 1 つです。
配列に対してこのようなものが得られます。
ここで、配列内のすべての可能な正方形フィッティングをチェックする必要があります (より良い解決策がある可能性がありますが、私には思いつきません) 他の 4 つの中でこのようなものを探します。
配列に合計を保持しているため、配列 3x3 (左上から) をチェックすると、すべての合計が 15 であることが明確にわかります。これは、魔方陣であることを意味します。
左上から始めない場合は少しわかりにくくなりますが、それでも簡単です。2 番目の魔方陣が強調表示されている以下の例を見てください。
暗い要素から対応する明るい要素を差し引いた値は一定 (この場合は 12) であることがわかります。
最初の魔方陣でも同じように機能しますが、ゼロがあるためスキップできます。