⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fournarray.htm

📁 “常见程式演算”主要收集一些常见的程式练习题目
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>





  
  
  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">





  
  
  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">





  
  
  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">





  
  
  
  
  
  <title>4N 魔方阵</title>
</head>


<body>





<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>





<h1><a href="AlgorithmGossip.htm">Algorithm Gossip: 4N 魔方阵</a></h1>





<h2>说明</h2>

与 <a href="OddArray.htm">奇数魔术方阵</a> 相同,在于求各行、各列与各对角线的和相等,而这次方阵的维度是4的倍数。<br>

<h2>解法</h2>

先来看看4X4方阵的解法: <br>


<div style="text-align: center;"><img style="width: 423px; height: 117px;" alt="4N 魔方阵" title="4N 魔方阵" src="images/fourNArray-1.jpg"><br>

<br>

<div style="text-align: left;">简单的说,就是一个从左上由1依序开始填,但遇对角线不填,另一个由左上由16开始填,但只填在对角线,再将两个合起来就是解答了;如果N大于2,则以 4X4为单位画对角线: <br>

<div style="text-align: center;"><img style="width: 528px; height: 232px;" alt="4N 魔方阵" title="4N 魔方阵" src="images/fourNArray-2.jpg"></div>

<br>

至于对角线的位置该如何判断,有两个公式,有兴趣的可以画图印证看看,如下所示:<br>

<div style="margin-left: 40px;"><span style="font-weight: bold; font-family: Courier New,Courier,monospace;">左上至右下:j % 4 == i % 4</span><br style="font-weight: bold; font-family: Courier New,Courier,monospace;">

<span style="font-weight: bold; font-family: Courier New,Courier,monospace;">右上至左下:(j % 4 + i % 4) == 1 </span><br>

</div>

<br>

<h2> 实作</h2>


<ul>

  <li> C
  </li>

</ul>


<pre>#include &lt;stdio.h&gt; <br>#include &lt;stdlib.h&gt; <br><br>#define N 8 <br><br>int main(void) { <br>    int i, j; <br>    int square[N+1][N+1] = {0}; <br><br>    for(j = 1; j &lt;= N; j++) { <br>        for(i = 1; i &lt;= N; i++){ <br>            if(j % 4 == i % 4 || (j % 4 + i % 4) == 1) <br>                square[i][j] = (N+1-i) * N -j + 1; <br>            else <br>                square[i][j] = (i - 1) * N + j; <br>        } <br>    } <br><br>    for(i = 1; i &lt;= N; i++) { <br>        for(j = 1; j &lt;= N; j++) <br>            printf("%2d ", square[i][j]); <br>        printf("\n"); <br>    } <br><br>    return 0; <br>} <br></pre>


<br>


<ul>

  <li> Java
  </li>

</ul>


<pre>public class Matrix {<br>    public static int[][] magicFourN(int n) {<br>        int[][] square = new int[n+1][n+1]; <br><br>        for(int j = 1; j &lt;= n; j++) { <br>            for(int i = 1; i &lt;= n; i++){ <br>                if(j % 4 == i % 4 || (j % 4 + i % 4) == 1) <br>                    square[i][j] = (n+1-i) * n -j + 1; <br>                else <br>                    square[i][j] = (i - 1) * n + j; <br>            } <br>        } <br>        <br>        int[][] matrix = new int[n][n];<br>        <br>        for(int k = 0; k &lt; matrix.length; k++) {<br>           for(int l = 0; l &lt; matrix[0].length; l++) {<br>               matrix[k][l] = square[k+1][l+1];<br>           }<br>        }<br>        <br>        return matrix;<br>    }<br>    <br>    public static void main(String[] args) {<br>        int[][] magic = Matrix.magicFourN(8);<br>        for(int k = 0; k &lt; magic.length; k++) {<br>            for(int l = 0; l &lt; magic[0].length; l++) {<br>                System.out.print(magic[k][l] + " ");<br>            }<br>            System.out.println();<br>         }<br>    }<br>} </pre>

</div>





</div>

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -