java计算奇数阶魔方阵

一、提出问题

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

图3 – 4 3阶5阶和7阶魔方阵

容易知道,这三个魔方阵的魔方常数分别是15、65和175。

现在要求给出:能让计算机自动输出类似图3 – 4 所示的n阶奇数魔方阵的算法,其中n为任意给定的一个不小于3的奇数。

二、简单分析

决定“奇数阶魔方阵”的关键是要按要求决定其方阵中的各个数字。观察图3 – 4中的三个奇数阶魔方阵,不难发现:

1.由于是正规魔方,故所填入的n 2个不同整数依次为1、2、3、…、n 2

2.各行、列和对角线上的数字虽各不相同,但其和却是相同的。这表明,其魔方常数可由公式n ( n 2 + 1 ) / 2得到。

3.数字在阵列中的次序,并没有遵从阵列单元的行、列下标的顺序,但数字“1”却始终出现在阵列第一行的正中间位置,而数字“n 2”也始终出现在阵列第n行的正中间位置,这说明阵列中的数字排列应该是有一定规律的。

import java.util.Scanner;
/**
 *
 * @author 冷血
 *
 */
public class Java_4 {
    private int[][] a;
    private int j ,i ,sum = 1;
    private int N,n;
    public Java_4(int n){
        N = n;
        this.n = n;
            N=N-1;
         a = new int[n][n];
    }
    public void jiSuan(){
        i = 0; j=n/2;
        a[i][j] =sum ;
        while(sum<=n*n){
            if(i==0&&j!=N){
                i = N;
                j++;
                sum++;
                a[i][j]=sum;
                }
            if(sum==n*n)
                break;
            if(j==N&&i!=0){
                j=0;
                i--;
                sum++;
                a[i][j]=sum;
            }
            if(j==N&&i==0){

                i++;

                sum++;
                a[i][j]=sum;

            }
            if(sum==n*n)
                break;
            if(i!=0&&j!=N&&a[i-1][j+1]==0){
                i--;j++;sum++;
                a[i][j] = sum;
            }
            if(sum==n*n)
                break;
            if(i!=0&&j<N&&a[i-1][j+1]!=0){
                i++;sum++;
                a[i][j] = sum;

            }
            if(sum==n*n)
                break;
        }
        if(i==0&&j==0){
            i=N;sum++;j++;
            a[i][j] = sum;
        }
    }
    public void paint(){
        for(int k = 0;k<a.length;k++){
            for(int l = 0;l<a.length;l++){
                System.out.printf("%-5d",a[k][l]);
            }
            System.out.println();
            System.out.println();
        }
    }
    public static void main(String[] args) {
        int m=0;
        @SuppressWarnings("resource")
        Scanner nuber = new Scanner(System.in);
        m = nuber.nextInt();
        Java_4 java = new Java_4(m);
        java.jiSuan();
        java.paint();
    }
}
时间: 2025-01-04 03:04:25

java计算奇数阶魔方阵的相关文章

奇数阶魔方阵

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

Java 实现奇数阶幻方的构造

一.设计的流程图如下所示 二.Java 语言的代码实现 package MagicSquare; //奇数幻方的实现 public class Magic_Odd { //n 为幻方的阶数 public static int[][] magicOdd(int n) { //构造一个(n+2)*(n+2)阶的方阵 int[][] square = new int[n + 1][n + 1]; int i = 0; int j = (n + 1) / 2; //从第一行的中间那个数字(是1)开始填幻

n阶魔方阵

奇数阶魔方阵就是指行列数都是吧n(n>=3 且 n%2 == 1)的魔方阵 奇数阶魔方阵的数字规律 通过对奇数阶魔方阵的分析,其中的数字排列有如下的规律: (1)自然数1出现在第一行的正中间: (2)若填入的数字在第一行(不在第n列),则下一个数字在第n行(最后一行)且列数加1(列数右移一列): (3)若填入的数字在该行的最右侧,则下一个数字就填在上一行的最左侧: (4)一般地,下一个数字在前一个数字的右上方(行数少1,列数加1): (5)若应填的地方已经有数字或在方阵之外,则下一个数字就填在前

输出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)

hdu1998 奇数阶魔法 (数组填数)

奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3071    Accepted Submission(s): 1614 Problem Description 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样 的方阵叫魔方.n为奇数时我们有1种构造方法,叫做"右上方"

Hdu 1998 奇数阶魔方

奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4629    Accepted Submission(s): 2622 Problem Description 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n为奇数时我们有1种构造方法,叫做"右上方" ,

求N奇数阶幻方

1. 如果矩阵满足条件,那么对任意,也满足条件.证明显然. 设为奇数,我们现在构造一个n阶幻方包含0到所有数这里x,y满足同余式待确定. 由于该方程组的系数矩阵的行列式为1,所以对任意i,j有唯一解.我们接下来确定a,b: 首先验证每行每列的和均相等,即 由于对任意i,,当x取遍模n的剩余类时,也会取遍所有的剩余类 故每行的和为:同理验证每列. 对于对角线:令b = n - 1, a = (n-1)/2,可以验证y = (n - 1)/2, x = i所以其和为:n*(0 + ... n - 1

算法:九宫格问题--奇数阶魔方(Magic-Square)

一.魔方介绍 魔方(这里是简称,也可以叫幻方.魔术矩阵,Magic Square)是 n×n 正方形网格(n 为每侧的单元数),里面每个单元格填充了不同的正整数 1, 2, 3, ... , n2,并且每一行.每一列和对角线中的正整数之和相等.每行.每列以及对角线上的单元格里的正整数之和又叫做魔术常数或魔方的魔术和. 幻方历史: <系辞>云:“河出图,洛出书,圣人则之.”在宋朝之前,洛书的记述只有文字. 九宫图实物最早发现于西汉,1977年中国考古学家在安徽阜阳县双古堆西汉古墓中发现汉文帝七年