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

📄 oddarray.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>奇数魔方阵</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: 奇数魔方阵</a></h1>




<h2>说明</h2>
将1到n(为奇数)的数字排列在nxn的方阵上,且各行、各列与各对角线的和必须相同,如下所示:<br>

<div style="text-align: center;"><img style="width: 115px; height: 79px;" alt="奇数魔方阵" title="奇数魔方阵" src="images/oddArray-1.jpg"><br>
<div style="text-align: left;">
<h2>&nbsp;解法</h2>
</div>
<div style="text-align: left;">填魔术方阵的方法以奇数最为简单,第一个数字放在第一行第一列的正中央,然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示: <br>
<div style="text-align: center;"><img style="width: 198px; height: 194px;" alt="奇数魔方阵" title="奇数魔方阵" src="images/oddArray-2.jpg"><br>
</div>
</div>
</div>
一般程式语言的阵列索引多由0开始,为了计算方便,我们利用索引1到n的部份,而在计算是向右(左)上或向下时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右(左)上,原理很简单,看看是不是已经在同一列上绕一圈就对了。 <br>
<br>
<h2> 实作</h2>

<ul>
  <li> C
  </li>
</ul>

<pre>#include &lt;stdio.h&gt; <br>#include &lt;stdlib.h&gt; <br><br>#define N 5 <br><br>int main(void) { <br>    int i, j, key; <br>    int square[N+1][N+1] = {0}; <br><br>    i = 0; <br>    j = (N+1) / 2; <br><br>    for(key = 1; key &lt;= N*N; key++) { <br>        if((key % N) == 1) <br>            i++; <br>        else { <br>            i--; <br>            j++; <br>        } <br><br>        if(i == 0) <br>            i = N; <br>        if(j &gt; N) <br>            j = 1; <br><br>        square[i][j] = key; <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>    } <br><br>    return 0; <br>} <br></pre>

<br>

<ul>
  <li> Java
  </li>
</ul>

<pre>public class Matrix {<br>    public static int[][] magicOdd(int n) {<br>        int[][] square = new int[n+1][n+1]; <br><br>        int i = 0; <br>        int j = (n+1) / 2; <br><br>        for(int key = 1; key &lt;= n*n; key++) { <br>            if((key % n) == 1) <br>                i++; <br>            else { <br>                i--; <br>                j++; <br>            } <br><br>            if(i == 0) <br>                i = n; <br>            if(j &gt; n) <br>                j = 1; <br><br>            square[i][j] = key; <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.magicOdd(5);<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>}<br></pre>
<br>




</body>
</html>

⌨️ 快捷键说明

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