n阶魔方阵

奇数阶魔方阵就是指行列数都是吧n(n>=3 且 n%2 == 1)的魔方阵

奇数阶魔方阵的数字规律 
通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律: 
(1)自然数1出现在第一行的正中间; 
(2)若填入的数字在第一行(不在第n列),则下一个数字在第n行(最后一行)且列数加1(列数右移一列); 
(3)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧; 
(4)一般地,下一个数字在前一个数字的右上方(行数少1,列数加1); 
(5)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前一个数字的下方。(一般地,n的倍数的下一个数字是在该数的下方。) 
按照上述的规律,我们来完成3阶的魔方阵: 
第一步:将“1”填入1行2列的位置,即 (按规律(1)); 
第二步:将“2”填入3 (最后) 行3 ( = 2 + 1 )列的位置,即 (按规律(2)); 
第三步:将“3”填入2行1列的位置,即 (按规律(3)); 
第四步:将“4”填入3行1列的位置(“3”的下面);即 (按规律(5)) 
第五步:将“5”填入2行2列的位置;即 (按规律(4)); 
第六步:将“6”填入1行3列的位置,即 (按规律(4)); 
第七步:将“7”填入2行3列的位置(“6”的下面),即 (按规律(5)); 
第八步:将“8”填入1行1列的位置,即 (按规律(3)); 
第九步:将“9”填入3行2列的位置,即 (按规律(2))。 
至此,一个3阶魔方阵构造完成了。

public Magic(int n){

  int[][] mat = new int[][];

  inti=0,j=n/2;

  for(int k=1;k<=n*n;k++){

    mat[i][j] = k;

    if(k%n==0){

      i=(i+1)%n; 

    }

    esle{

       i=(i-1+n)%n;

      j=(j+1)%n;

    }

  }

  for(i=0;i>mat.length;i++){

    for(j=0;j<mat[i].length;j++){

      System.out.print(mat[i][j]+"\t");

    }

  System.out.println();

}

}

时间: 2024-08-02 16:24:10

n阶魔方阵的相关文章

奇数阶魔方阵

原题 打印魔方阵,魔方阵是指这样的方针,每一行.每一列以及对角线的和相等.例如三阶魔方阵: 8 1 6 3 5 7 4 9 2 编程打印奇数阶魔方阵. 提示 问题解决的关键是元素的填充,第一个元素1的位置在第一行正中,新的位置应该处于最近插入元素的右上方:但如果右上方的位置超出方针上边界,则新的位置应该取列的最下一个位置:超出右边界则取行的最左的一个位置:若最近插入的元素为n的整数倍,则选下面一行同列上的位置为新的位置. 实现代码 /*******************************

java计算奇数阶魔方阵

一.提出问题 所谓"奇数阶魔方阵"是指n为不小于3的奇数的魔方阵.这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵.例如:3阶.5阶和7阶的魔方阵如图3 – 4 所示. , , 图3 – 4 3阶5阶和7阶魔方阵 容易知道,这三个魔方阵的魔方常数分别是15.65和175. 现在要求给出:能让计算机自动输出类似图3 – 4 所示的n阶奇数魔方阵的算法,其中n为任意给定的一个不小于3的奇数. 二.简单分析 决定"奇数阶魔方阵"的关键是要按要求决定其方阵中的

输出n阶“魔方阵”

魔方阵:每一行.每一列和对角线之和均相等. 程序如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 //输出魔方阵 6 int i,j,k,p,n,a[15][15]; 7 p=1;//用于判断输入的数字是否符合条件 8 while(p==1){ 9 printf("enter n (n=1--15):"); 10 scanf("%d",&n); 11 i

SDUST 作业10 Problem D 魔方阵

Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的规律如下: 从1-N*N的 各个数依次如下规则存放: (1) 1在第一行中间一列: (2) 每一个数存放的行比前一个数的行数减一,列数加一(如上的三阶方阵5在4的上一行,后一列): (3) 如果上一个数在第一行,则下一个数在最后一行,列数加一: (4) 如果上一个数在最后一列,则下一个数在第一列,行数减一: (5)

C语言复习---输出魔方阵

一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 2.下一个元素存放在当前元素的上一行.下一列. 3.如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下一列的时候,必须把这个矩阵看成是回绕的. 算法实现: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> #define MAXSIZE 100

【C++小白成长撸】--(续)双偶数N阶魔阵

原理: 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4) 每个魔阵的对角线都标为"-1",其余位置标为"0" 从第一个位置(a[0][0])从左到右,从上到下(例如:a[0][0],a[0][1]--a[0][3],a[1][0])用自然数(从1开始)依次填充,每次填充数加一,遇到-1,跳过,但自然数继续计数 当第三步全部完成后,从最下面一个位置(a[3][3]),从右到左,从下到上,计数从1开始,每次填充数加一,遇到填充了的位置,跳过,但自然数继续计数.

魔方阵

①问题描述 魔方阵是一个古老的智力问题,它要求在一个m×m的矩阵中填入1-m2的数字(m为奇数),使得每一行.每一列.每条对角线的累加和都相等,如图1所示. 15 8 1 24 17 16 14 7 5 23 22 20 13 6 4 3 21 19 12 10 9 2 25 18 11 图1 五阶魔方阵示例 ②基本要求 输入魔方阵的行数m,要求m为奇数,程序对所输入的m作简单的判断,如m有错,能给出适当的提示信息. 实现魔方阵. 输出魔方阵. ③实现提示 本实验使用的数据结构是数组. 解魔方阵

神奇的幻方【够造奇数阶的魔方阵】

http://noi.openjudge.cn/ch0108/22/ 总时间限制:  1000ms 内存限制:  65535kB 描述 幻方是一个很神奇的N*N矩阵,它的每行.每列与对角线,加起来的数字和都是相同的.我们可以通过以下方法构建一个幻方.(阶数为奇数)1.第一个数字写在第一行的中间2.下一个数字,都写在上一个数字的右上方:    a.如果该数字在第一行,则下一个数字写在最后一行,列数为该数字的右一列    b.如果该数字在最后一列,则下一个数字写在第一列,行数为该数字的上一行    

魔方阵,奇数阵。输入一个奇数,产生一个魔方阵

package com.test.dailyTest.doSome; import java.util.Scanner; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; public class Njie { public static void main(String[] args) throws Exception { System.out.println("n阶举证-奇数")