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

java计算奇数阶魔方阵

作者头像
张泽旭
发布2018-12-10 16:47:10
1.2K0
发布2018-12-10 16:47:10
举报
文章被收录于专栏:张泽旭的专栏

一、提出问题

所谓“奇数阶魔方阵”是指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 ( n2 + 1 ) / 2得到。

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

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

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

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

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

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