奇数魔方阵(奇数幻方)

说明:

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

相关文章

来自专栏落花落雨不落叶

canvas画简单电路图

59911
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2506
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6708
来自专栏c#开发者

为什么nhibernate 不能保存on-to-many的结构

下面是主类文件 Code namespace EasyTalk.Module {     /// <summary>     /// SiteAddre...

2545
来自专栏魂祭心

原 canvas绘制clock

4034
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3095
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2132
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3859
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4054

扫码关注云+社区