奇数魔方阵(奇数幻方)

说明:

将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 条评论
登录 后参与评论

相关文章

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

Excel常用函数大全

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

3699
来自专栏自学笔记

Data Structure_图图论带权图

交通运输,社交网络,互联网,工作的安排,闹区活动等等都可以用到图论处理。图可以分成两大类,一类是无向图,就是没有方向的,就好像两个人都互相认识一样,有向图就是单...

591
来自专栏zingpLiu

python2.x之pyshp的使用

2916
来自专栏计算机视觉与深度学习基础

Leetcode 239. Sliding Window Maximum

Given an array nums, there is a sliding window of size k which is moving from t...

1995
来自专栏张泽旭的专栏

java计算奇数阶魔方阵

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

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

P1789 【Mc生存】插火把

题目背景 初一党应该都知道...... 题目描述 话说有一天linyorson在Mc开了一个超平坦世界,他把这个世界看成一个n*n的方阵,现在他有m个火把和k个...

3495
来自专栏绿巨人专栏

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

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

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

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

4148
来自专栏菩提树下的杨过

Flash/Flex学习笔记(19):颜色合成与分解的基本原理

传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来...

2138
来自专栏清墨_iOS分享

OpenGLES-04 绘制带颜色的立方体

前面几篇文章都只是绘制了平面图形,接下来我们开始绘制一个真正的3D立方体图形。代码在前一篇文章基础上修改。 绘制立方体之前,我们需要知道这个立方体的各个顶点坐...

3789

扫码关注云+社区