幻方,是一种古老的填数字游戏。在这个游戏中,要求将从1到n2的数值填入到n*n的方阵中,使得方阵的每行、每列以及对角线上的数值总和都相等。著名的河图洛书就是在3*3的方阵中填入1-9这9个数字,使得每行每列及对角线上数字之和为15。

对于一个n为奇数的方阵来说,我们可以按照如下的方法构造n阶幻方:

  1. 将1放置在第一行的中间,其后的数按照从左下方到右上方的一条对角线上依次填入,并做下列修正;
  2. 当到达第一行时,下一个数的放置位置是:它所处的行是最后一行,所处的列是紧跟着前一个数所处列的后面一列;(即:行数减1,再模n;列数加1,再模n。)
  3. 当到达最右边的一列时,下一个数的放置位置是:它所处的列是最左边的列(即第一列),它所处的行是紧跟着前一个数所处行的上一行;(即:列数加1,再模n; 行数减1,再模n。)
  4. 当到达一个已经填上数的方格或者已经到达幻方的右上角是,下一个数的放置位置是上一个数的方格的正下方。(即:行数加1,模n,列数不变)

请写代码构造并输出5阶幻方。

17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 25 25 2 9

做题思路:

1)、先定义一个5*5的二维数组,并初始化每个值为0;

2)、从(0,2)即1的位置开始进入,根据题目条件改变arr[row][col]中row和col的值,使其到达下个位置,依次将1-25填入表格;

public class magic_square {public static void main(String[] args) {int[][] arr = new int[5][5];//Initialize each value of the 5*5 array to 0//建立一个5*5的二维数组,并把它的每个值初始化为0for(int i = 0;i < arr.length;i ++){for(int j = 0;j < arr[i].length;j ++){arr[i][j] = 0;}}//Define the initial position of 1 (0, 2)//定义数值1的初始位置(0,2)int row = 0,col = 2,num = 1;while(num < 26){//When the original value is 0, it means that the number has not been filled in//判断当前的值是否为0,不为0时表示该位置已被填充if(arr[row][col] == 0){//When the first row is reached, the next position is the last row, and the number of columns increases by one//当该位置是第一行时,下一个位置为当前行数减1,列数加1if(row == 0 && col != 4){arr[row][col] = num ++;row = 4;col ++;}//When the rightmost column is reached, the next position is the first case, and the number of rows is reduced by one//当到达最右边一列时,下个位置为当前列数加1,行数减1else if(row != 0 && col == 4){arr[row][col] = num ++;row --;col = 0;}//When the upper right corner is reached, the next position is directly below the square of the previous number//当到达右上角时,下一个位置为上一个位置的正下方else if(row == 0 && col == 4){arr[row][col] = num ++;row ++;}//Otherwise, row minus one, column plus one//当没有遇到题目中的界限,下一个位置为当前位置的右上方else{arr[row][col] = num ++;row --;col ++;}}//When the original value is not 0, it means that the number has been filled in, and the position is changed.//当该位置不为0,即已经被填充,下一个位置为上一个位置的正下方else{row += 2;col --;}}//print the final array//打印最终数组for(int i = 0;i < arr.length;i ++){for(int j = 0;j < arr[i].length;j ++){System.out.print(arr[i][j]+"\t");}System.out.println();}}
}

幻方5*5(java实现)相关推荐

  1. 华为OD机试 - 幻方修复(Java JS Python)

    题目描述 幻方(Magic Square)是一个由1~N²,共N²个整数构成的N*N矩阵,满足每行.列和对角线上的数字和相等. 上回你已经帮助小明将写错一个数字的幻方进行了修复,小明在感谢之余也想进一 ...

  2. 【 华为OD机试 2023】 九宫格游戏 / 三阶积幻方(C++ Java JavaScript Python)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 C++ JavaScript Java Python 题目描述 九宫格是一款广为流传的游戏,起源于河图洛书. 游戏规则是:1到9九个数字放在3× ...

  3. java 偶数求和 数组_JAVA实现幻方

    作者:刘亮 幻方(Magic Square)是一种将数字安排在正方形格子中,使每行.列和对角线上的数字和都相等的方法. 幻方也是一种中国传统游戏.旧时在官府.学堂多见.它是将从一到若干个数的自然数排成 ...

  4. JAVA实现置换加密和幻方加密(密码学)

    一.实验目的 帮助学生掌握置换密码的加密解密过程,能够利用所学过的编程语言,熟悉加密算法流程与编程实现加密算法.使学生掌握编程实现实际问题中的方法,提高专业技能和专业素养. 要求学生掌握算法的程序实现 ...

  5. 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明

    刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...

  6. java判断44数组是否是4阶幻方_2015蓝桥杯决赛Java A组 第二题--四阶幻方

    //把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. // //四阶幻方可能有很多方案.如果固定左上角为1,请计算一共有多少种方案. //比如: ...

  7. 奇数阶幻方 java_N(奇数)阶幻方-java实现代码

    看完最强大脑,有一期是说N阶幻立方的,作为一个程序员,我的第一反应时我可以用程序实现,在此公布N(奇数)阶幻方的java实现代码: package com.lzugis.test; public cl ...

  8. 神奇的幻方(洛谷P2615题题解,Java语言描述)

    题目要求 P2615题目链接 分析 注意题目说的是,幻方的N必定是奇数(实测确实不能是偶数),那就不需要检测了. 实际模拟,就是一个地图,按指定的要求移动就行. 这种题,看着吓人,但是其实严格按照说编 ...

  9. 三阶幻方java解法_蓝桥杯决赛 Java大学B组 第二题 反幻方

    题目 反幻方 我国古籍很早就记载着 2 9 4 7 5 3 6 1 8 这是一个三阶幻方.每行每列以及对角线上的数字相加都相等. 下面考虑一个相反的问题. 可不可以用 1~9 的数字填入九宫格. 使得 ...

  10. P2615 神奇的幻方---Java

    题目描述幻方是一种很神奇的 N∗NN*NN∗N 矩阵:它由数字 1,2,3,⋯⋯ ,N×N1,2,3,\cdots \cdots ,N \times N1,2,3,⋯⋯,N×N 构成,且每行.每列及两 ...

最新文章

  1. SVN服务器搭建--Subversio与TortoiseSVN的配置安装
  2. python extractor_Python pyextractor包_程序模块 - PyPI - Python中文网
  3. 王彪20162321 2016-2017-2 《程序设计与数据结构》第7周学习总结
  4. 从落后的传统WAN转向SD-WAN—Vecloud
  5. php中的魔术函数以及魔术常量
  6. CAN 总线 之一 总线拓扑、物理电平、发展史 详解
  7. android关于控件中setTag(key,Object)的设置的相关问题
  8. servlet获取相对路径 绝对路径
  9. NRedis-Proxy - 高性能中间件服务器
  10. 2017双11技术揭秘—阿里数据库计算存储分离与离在线混布
  11. 自加一运算_C语言i++、++i混合运算老手未必全掌握,看了你就明白了
  12. 晶体封装越小esr越大_二轮复习分子晶体与原子晶体
  13. Spring Boot学习总结(16)——为什么说Java程序员到了必须掌握Spring boot的时候了?
  14. System.IO.Path 操作
  15. VMware Pro16 安装MacOS 11/12教程
  16. 豆瓣fm android,豆瓣 FM
  17. Linux下查看日志常用命令
  18. 来看看你的云栖社区2017年度总结
  19. 学术期刊数据库---EBSCO
  20. java 注解传值_java注解 - Mr.yang.localhost - 博客园

热门文章

  1. C++—— 数组名与向量名
  2. java sdk 安装_Java SDK下载安装环境配置+AndroidKiller配置教程
  3. Scrum敏捷开发简介
  4. 计算机毕设(附源码)JAVA-SSM基于大数据的高校国有固定资产管理及绩效自动评价系统
  5. 连接mysql的url是什么_JDBC的URL是什么
  6. 服务器主板纽扣电池型号,纽扣电池的常见型号(cr2032,cr2450)怎么看
  7. 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...
  8. JAVA实现RS-485串口编程
  9. 如何使图片放大后依然清晰?
  10. AWS服务器密码登录设置