幻方5*5(java实现)
幻方,是一种古老的填数字游戏。在这个游戏中,要求将从1到n2的数值填入到n*n的方阵中,使得方阵的每行、每列以及对角线上的数值总和都相等。著名的河图洛书就是在3*3的方阵中填入1-9这9个数字,使得每行每列及对角线上数字之和为15。
对于一个n为奇数的方阵来说,我们可以按照如下的方法构造n阶幻方:
- 将1放置在第一行的中间,其后的数按照从左下方到右上方的一条对角线上依次填入,并做下列修正;
- 当到达第一行时,下一个数的放置位置是:它所处的行是最后一行,所处的列是紧跟着前一个数所处列的后面一列;(即:行数减1,再模n;列数加1,再模n。)
- 当到达最右边的一列时,下一个数的放置位置是:它所处的列是最左边的列(即第一列),它所处的行是紧跟着前一个数所处行的上一行;(即:列数加1,再模n; 行数减1,再模n。)
- 当到达一个已经填上数的方格或者已经到达幻方的右上角是,下一个数的放置位置是上一个数的方格的正下方。(即:行数加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实现)相关推荐
- 华为OD机试 - 幻方修复(Java JS Python)
题目描述 幻方(Magic Square)是一个由1~N²,共N²个整数构成的N*N矩阵,满足每行.列和对角线上的数字和相等. 上回你已经帮助小明将写错一个数字的幻方进行了修复,小明在感谢之余也想进一 ...
- 【 华为OD机试 2023】 九宫格游戏 / 三阶积幻方(C++ Java JavaScript Python)
文章目录 题目描述 输入描述 输出描述 用例 题目解析 C++ JavaScript Java Python 题目描述 九宫格是一款广为流传的游戏,起源于河图洛书. 游戏规则是:1到9九个数字放在3× ...
- java 偶数求和 数组_JAVA实现幻方
作者:刘亮 幻方(Magic Square)是一种将数字安排在正方形格子中,使每行.列和对角线上的数字和都相等的方法. 幻方也是一种中国传统游戏.旧时在官府.学堂多见.它是将从一到若干个数的自然数排成 ...
- JAVA实现置换加密和幻方加密(密码学)
一.实验目的 帮助学生掌握置换密码的加密解密过程,能够利用所学过的编程语言,熟悉加密算法流程与编程实现加密算法.使学生掌握编程实现实际问题中的方法,提高专业技能和专业素养. 要求学生掌握算法的程序实现 ...
- 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明
刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...
- java判断44数组是否是4阶幻方_2015蓝桥杯决赛Java A组 第二题--四阶幻方
//把1~16的数字填入4x4的方格中,使得行.列以及两个对角线的和都相等,满足这样的特征时称为:四阶幻方. // //四阶幻方可能有很多方案.如果固定左上角为1,请计算一共有多少种方案. //比如: ...
- 奇数阶幻方 java_N(奇数)阶幻方-java实现代码
看完最强大脑,有一期是说N阶幻立方的,作为一个程序员,我的第一反应时我可以用程序实现,在此公布N(奇数)阶幻方的java实现代码: package com.lzugis.test; public cl ...
- 神奇的幻方(洛谷P2615题题解,Java语言描述)
题目要求 P2615题目链接 分析 注意题目说的是,幻方的N必定是奇数(实测确实不能是偶数),那就不需要检测了. 实际模拟,就是一个地图,按指定的要求移动就行. 这种题,看着吓人,但是其实严格按照说编 ...
- 三阶幻方java解法_蓝桥杯决赛 Java大学B组 第二题 反幻方
题目 反幻方 我国古籍很早就记载着 2 9 4 7 5 3 6 1 8 这是一个三阶幻方.每行每列以及对角线上的数字相加都相等. 下面考虑一个相反的问题. 可不可以用 1~9 的数字填入九宫格. 使得 ...
- P2615 神奇的幻方---Java
题目描述幻方是一种很神奇的 N∗NN*NN∗N 矩阵:它由数字 1,2,3,⋯⋯ ,N×N1,2,3,\cdots \cdots ,N \times N1,2,3,⋯⋯,N×N 构成,且每行.每列及两 ...
最新文章
- SVN服务器搭建--Subversio与TortoiseSVN的配置安装
- python extractor_Python pyextractor包_程序模块 - PyPI - Python中文网
- 王彪20162321 2016-2017-2 《程序设计与数据结构》第7周学习总结
- 从落后的传统WAN转向SD-WAN—Vecloud
- php中的魔术函数以及魔术常量
- CAN 总线 之一 总线拓扑、物理电平、发展史 详解
- android关于控件中setTag(key,Object)的设置的相关问题
- servlet获取相对路径 绝对路径
- NRedis-Proxy - 高性能中间件服务器
- 2017双11技术揭秘—阿里数据库计算存储分离与离在线混布
- 自加一运算_C语言i++、++i混合运算老手未必全掌握,看了你就明白了
- 晶体封装越小esr越大_二轮复习分子晶体与原子晶体
- Spring Boot学习总结(16)——为什么说Java程序员到了必须掌握Spring boot的时候了?
- System.IO.Path 操作
- VMware Pro16 安装MacOS 11/12教程
- 豆瓣fm android,豆瓣 FM
- Linux下查看日志常用命令
- 来看看你的云栖社区2017年度总结
- 学术期刊数据库---EBSCO
- java 注解传值_java注解 - Mr.yang.localhost - 博客园
热门文章
- C++—— 数组名与向量名
- java sdk 安装_Java SDK下载安装环境配置+AndroidKiller配置教程
- Scrum敏捷开发简介
- 计算机毕设(附源码)JAVA-SSM基于大数据的高校国有固定资产管理及绩效自动评价系统
- 连接mysql的url是什么_JDBC的URL是什么
- 服务器主板纽扣电池型号,纽扣电池的常见型号(cr2032,cr2450)怎么看
- 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...
- JAVA实现RS-485串口编程
- 如何使图片放大后依然清晰?
- AWS服务器密码登录设置