奇数魔方阵(奇数幻方)

说明:

将1到n(为奇数)的数字排列在nxn的方阵上,且各行、各列与各对角线的和必须相同。

解法:

填魔术方阵的方法以奇数最为简单,第一个数字放在第一行第一列的正中央,然后向右(左)上填,如果右(左)上已有数字,则向下填,如下图所示:

一般程式语言的阵列索引多由0开始,为了计算方便,我们利用索引1到n的部分,而在计算向右上时,我们可以将索引值除以n值,如果得到余数为1就向下,否则就往右上,原理很简单,看看是不是已经在同一列上绕一圈就对了。

C:

#include <stdio.h> 
#include <stdlib.h> 
#define N 5 
int main() 
{ 
    int i, j, key; 
    int square[N+1][N+1] = {0}; 
    i = 0; 
    j = (N+1) / 2; 
    for(key = 1; key <= N*N; key++) 
    { 
        if((key % N) == 1) 
            i++; 
        else { 
            i--; 
            j++; 
        } 
        if(i == 0) 
            i = N; 
        if(j > N) 
            j = 1; 
        square[i][j] = key; 
    } 
    for(i = 1; i <= N; i++) 
    { 
        for(j = 1; j <= N; j++) 
            printf("%2d ", square[i][j]); 
    } 
    return 0; 
}

Java:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏灯塔大数据

每周学点大数据 | No.43 相似连接的可扩展性

No.43期 相似连接的可扩展性 小可:那么具体是怎么做的呢? Mr. 王:我们先来看看求单元函数值是如何在 MapReduce 上实现的吧。 ? 图中有三...

35970
来自专栏PPV课数据科学社区

Excel常用函数大全

我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。这里整理了Excel中使用频率最高的函数的功能、使用...

39190
来自专栏灯塔大数据

每周学点大数据 | No.30前序计数

No.30期 前序计数 Mr. 王:我们再来说说父子关系判定的应用。前序计数是一种非常常用的对树进行处理的方法。前序计数实现的就是对各个节点按照其前序遍...

34770
来自专栏绿巨人专栏

机器学习实战 - 读书笔记(12) - 使用FP-growth算法来高效发现频繁项集

34780
来自专栏小樱的经验随笔

详解斯坦纳点及斯坦纳树及模版归纳总结

①什么是斯坦纳点?   假设原来已经给定了个点,库朗等指出需要引进的点数至多为,此种点称为斯坦纳点。过每一斯坦纳点,至多有三条边通过。若为三条边,则它们两两交成...

92460
来自专栏zingpLiu

python2.x之pyshp的使用

49260
来自专栏数据结构与算法

7828:最大公约数与最小公倍数

7828:最大公约数与最小公倍数 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 两个正整数的最大公约数是G,最小公倍数是...

47680
来自专栏张泽旭的专栏

java计算奇数阶魔方阵

所谓“奇数阶魔方阵”是指n为不小于3的奇数的魔方阵。这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵。例如:3阶、5阶和7阶的魔方阵如图3 – 4...

12720
来自专栏desperate633

LintCode 哈希函数题目代码

在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数...

11040
来自专栏PingCAP的专栏

TiDB 源码阅读系列文章(十三)索引范围计算简介

在数据库中处理查询请求时,如果可以尽早的将无关数据过滤掉,那么后续的算子就可以少做无用功,提升整个 SQL 的执行效率。过滤数据最常用的手段是使用索引,TiDB...

20940

扫码关注云+社区

领取腾讯云代金券