Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >java计算奇数阶魔方阵

java计算奇数阶魔方阵

作者头像
张泽旭
发布于 2018-12-10 08:47:10
发布于 2018-12-10 08:47:10
1.2K00
代码可运行
举报
文章被收录于专栏:张泽旭的专栏张泽旭的专栏
运行总次数:0
代码可运行

一、提出问题

所谓“奇数阶魔方阵”是指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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法与数据结构】奇数阶魔方阵
前端修罗场
2023/10/07
2890
奇数阶魔方阵
印"魔方阵"。所谓"魔方阵"是指这样的方阵,它的每一行、每一列以及对角线之和均相等。例如,三阶魔方阵为: 8   1   6 3   5   7 4   9   2 要求打印由1到n*n的奇数构成的魔方阵。(魔方阵.C)     分析:魔方阵中各数的排列规律如下: (1) 将"1"放在第一行中间一列; (2) 从"2"开始直到n*n止各数依次按下列规则存放:每一个数存放的     行比前一个数的行数减1,列数加1; (3) 如果上一数的行数为1,则下一数的列数为n(指最下一行); (4) 当上一个数的列数为n时,下一个数的列数应为1,行数减1; (5) 如果按上面规则确定的位置上已有数,或上一个数是第一行第n列
lop
2019/03/13
1.1K0
奇数魔方阵(奇数幻方)
说明: 将1到n(为奇数)的数字排列在nxn的方阵上,且各行、各列与各对角线的和必须相同。 解法: 填魔术方阵的方法以奇数最为简单,第一个数字放在第一行第一列的正中央,然后向右(左)上填,如果右(
mathor
2018/06/22
1.5K0
C++经典算法题-奇数魔方阵
将1到n(为奇数)的数字排列在nxn的方阵上,且各行、各列与各对角线的和必须相同,如下所示:
cwl_java
2020/02/13
5960
C++经典算法题-2(2N+1) 魔方阵
方阵的维度整体来看是偶数,但是其实是一个奇数乘以一个偶数,例如6X6,其中6=2X3,我们也称这种方阵与单偶数方阵。
cwl_java
2020/02/13
4660
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
请你找到最小的整数 X 同时满足: X 是 2019 的整倍数 X 的每一位数字都是奇数
红目香薰
2022/11/29
4670
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
JavaSE学习总结(二)——Java语言基础
根据文章内容撰写摘要总结
张果
2018/01/04
1.7K0
JavaSE学习总结(二)——Java语言基础
第十一届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
  小蓝特别喜欢 2 ,今年是公元 2020 年,他特别高兴。   他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2 ?
红目香薰
2022/11/29
7940
第十一届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
九宫格填法规律--奇数
2)在插入数据1的的位置的右上方插入数据2,若出边框,即在1的上边框,则2的插入位置是向下移动N个位置
leehao
2025/02/10
460
九宫格填法规律--奇数
java数据结构举例-幻方实现
幻方又叫做魔方阵,幻方阵,游戏规则是在一个n*n的矩阵中填入1到n*n的数字,使得买一行,每一列,每条对角线的累加相等。
林老师带你学编程
2022/11/30
3040
我整理了50道经典Java算法题,直接进了字节跳动!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
1.4K0
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
目录 A、有奖猜谜 B、煤球数目 C、平方怪圈 D、骰子游戏 E、分小组 F、凑算式 G、搭积木 H、冰雹数 I、四平方和 J、密码脱落 A、有奖猜谜 小明很喜欢猜谜语。 最近,他被邀请参加了X星球的猜谜活动。 每位选手开始的时候都被发给777个电子币。 规则是:猜对了,手里的电子币数目翻倍, 猜错了,扣除555个电子币, 扣完为止。 小明一共猜了15条谜语。 战果为:vxvxvxvxvxvxvvx 其中v表示猜对了,x表示猜错了。 请你计算一下,小明最后手里的电子币数目是多少。 请填写
红目香薰
2022/11/29
6980
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
【编程题】Java编程题五(10道)
【编程题】Java编程题六(10道) 【程序41】 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? public class lianxi41 { public static void main (String[] args) { int i,m,j=0,k,count;
Java帮帮
2018/03/22
1.1K0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
目录 A、哪天返回 B、猴子分香蕉 C、字母阵列 D、第几个幸运数 E、书号验证 F、打印大X G、缩位求和 H、等腰三角形 I、小朋友崇拜圈 J、耐摔指数 A、哪天返回 小明被不明势力劫持。后被扔到x星站再无问津。小明得知每天都有飞船飞往地球,但需要108元的船票,而他却身无分文。 他决定在x星战打工。好心的老板答应包食宿,第1天给他1元钱。 并且,以后的每一天都比前一天多2元钱,直到他有足够的钱买票。 请计算一下,小明在第几天就能凑够108元,返回地球。 题解: package actio
红目香薰
2022/11/29
1.3K0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
1043 方格取数 2000年NOIP全国联赛提高组
1043 方格取数 2000年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例): 某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。 此人从A点到B 点共走两次,试找出2条这样的路径,使得取
attack
2018/04/13
7020
1043 方格取数  2000年NOIP全国联赛提高组
Java编程题目(三)
分别赋一些随机整数,然后求出所有元素 的最大值, 最小值,平均值,和值,并输出出来。
润森
2019/11/06
1K0
C++经典算法题-4N魔方阵
与奇数魔术方阵 相同,在于求各行、各列与各对角线的和相等,而这次方阵的维度是4的倍数。
cwl_java
2020/02/13
4390
第七届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
能够表示为某个整数的平方的数字称为“平方数” 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数。 因为平方数的末位只可能是:[0, 1, 4, 5, 6, 9] 这6个数字中的某个。 所以,4325435332必然不是平方数。
红目香薰
2022/11/29
4000
第七届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
【06】JAVASE-数组讲解【从零开始学JAVA】
Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。
用户4919348
2024/05/25
1690
【06】JAVASE-数组讲解【从零开始学JAVA】
Java--十大排序算法
思想:两个相邻元素想比较,不断颠倒位置实现【i,不停的使arr.length-i-1内的最大数的放最后】 -如果数组的最大值刚好是在第一位,要将它挪到正确的位置就需要 n - 1 次移动
司六米希
2022/11/15
2680
相关推荐
【算法与数据结构】奇数阶魔方阵
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验