前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >奇数魔方阵(奇数幻方)

奇数魔方阵(奇数幻方)

作者头像
mathor
发布2018-06-22 10:31:23
1.4K0
发布2018-06-22 10:31:23
举报
文章被收录于专栏:mathor

说明:

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

解法:

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

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

C:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
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();
          }
     }
 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档