java构建n阶魔方方阵
package dataStructure;
import java.util.Arrays;
import java.util.Scanner;/** 构造魔方方阵*/
public class Magic_Matrix {public static void main(String args[]) {Scanner input = new Scanner(System.in);System.out.print("请输入方阵阶数:");int n = input.nextInt();Magic_Matrix matrix = new Magic_Matrix();int[][] magic_marix = null;if(n % 2 == 1) {magic_marix = matrix.build_Matrix_method1(n);}else if(n % 4 == 0) {magic_marix = matrix.build_Matrix_method2(n);}else {magic_marix = matrix.build_Matrix_method3(n);}for(int[] temp:magic_marix) {System.out.println(Arrays.toString(temp));}}/** n为被4整除的偶数*/public int[][] build_Matrix_method2(int n){int[][] magic_matrix = new int[n][n];for(int indexI =0, indexJ =0,i = 1;i<=n*n;i++) {magic_matrix[indexI][indexJ] = i;indexJ = indexJ+1;if(indexJ == n) {indexI = indexI+1;indexJ = 0;}}int temp = n/4;for(int indexI = 0;indexI < n;indexI++) {if(indexI % 4 == 0 || indexI % 4 == 3) {for(int indexJ = 0;indexJ < temp ;indexJ++) {magic_matrix[indexI][4*indexJ] = n*n+1 - magic_matrix[indexI][4*indexJ];magic_matrix[indexI][4*indexJ+3] = n*n+1 - magic_matrix[indexI][4*indexJ+3];}}else {for(int indexJ = 0; indexJ < temp; indexJ++){magic_matrix[indexI][4*indexJ + 1] = n*n+1 - magic_matrix[indexI][4*indexJ + 1];magic_matrix[indexI][4*indexJ + 2] = n*n+1 - magic_matrix[indexI][4*indexJ + 2];}}}return magic_matrix;}/** n为不能被4整除的偶数*/public int[][] build_Matrix_method3(int n){int[][] magic_matrix = new int[n][n];int indexI = 0,indexJ = n/4,temp = (n-2)/4;magic_matrix[indexI][indexJ] = 1;for(int i =2;i<=n*n/4;i++) {int indexI_last = indexI;int indexJ_last = indexJ;indexI = indexI-1;indexJ = indexJ +1;if(indexI < 0) {indexI = n/2-1;}if(indexJ == n/2) {indexJ = 0;}if(magic_matrix[indexI][indexJ] != 0) {indexI = indexI_last +1;indexJ = indexJ_last;if(indexI == n/2) {indexI = 0;}}magic_matrix[indexI][indexJ] = i;}for(indexI = 0; indexI< n/2; indexI++){for(indexJ = 0; indexJ < n/2; indexJ++){magic_matrix[indexI + n/2][indexJ] = magic_matrix[indexI][indexJ] + 3*n*n/4;magic_matrix[indexI][indexJ + n/2] = magic_matrix[indexI][indexJ] + n*n/2;magic_matrix[indexI + n/2][indexJ + n/2] = magic_matrix[indexI][indexJ] + n*n/4;}}int tempValue = 0;for(indexI = 0; indexI< n/2; indexI++){for(indexJ = 0; indexJ < temp; indexJ++){ if(indexI == n/4){tempValue = magic_matrix[n/4][n/4 + indexJ];magic_matrix[n/4][n/4 + indexJ] = magic_matrix[3*n/4][n/4 + indexJ];magic_matrix[3*n/4][n/4 + indexJ] = tempValue;}else{tempValue = magic_matrix[indexI][indexJ];magic_matrix[indexI][indexJ] = magic_matrix[indexI + n/2][indexJ];magic_matrix[indexI + n/2][indexJ] = tempValue;} }}if(temp > 1){for(indexI = 0; indexI< n/2; indexI++){for(indexJ = 0; indexJ < temp-1; indexJ++){ tempValue = magic_matrix[indexI][3*n/4 - indexJ];magic_matrix[indexI][3*n/4 - indexJ] = magic_matrix[indexI + n/2][3*n/4 - indexJ];magic_matrix[indexI + n/2][3*n/4 - indexJ] = tempValue; }}}return magic_matrix;}/** n为奇数* ,当n为奇数时,逻辑最简单 * 1.将1放到第一行中间以列* 2.从2开始知道n*n,各数依靠如下规则放置* 每一个数字存放的行比上一个数字的行减1,列加1* 例如当n=3时,1放在第一行的第二列,则2放在最后一行的第3列*/public int[][] build_Matrix_method1(int n){int[][] magic_matrix = new int[n][n];int indexI = 0;int indexJ = n/2;int value = 1;while(value <= n*n) {magic_matrix[indexI][indexJ] = value;value++;if(value % n == 1) {indexI++;}else {indexI--;indexJ++;if(indexI < 0) {indexI = n-1;}if(indexJ > n-1) {indexJ = 0;}}}return magic_matrix;}
}
java构建n阶魔方方阵相关推荐
- java 魔方_2 java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟 游戏 Develop 246万源代码下载- www.pudn.com...
开发工具: Java 文件大小: 3830 KB 上传时间: 2015-11-07 下载次数: 0 详细说明:java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟魔方游戏-java achiev ...
- java计算奇数阶魔方阵
一.提出问题 所谓"奇数阶魔方阵"是指n为不小于3的奇数的魔方阵.这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵.例如:3阶.5阶和7阶的魔方阵如图3 – 4 所示 ...
- 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)
n阶幻方是由前n^2(n的2次方)个自然数组成的一个n阶方阵,其各行.各列及两条对角线所含的n个数的和相等.洛书就是最基本的3×3阶魔方阵,做出某种最恰当的决定,横竖都有3个格. 0的倒数 a-1可以 ...
- 3阶魔方阵c语言算法,3阶魔方阵的算法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include "stdlib.h" #include "stdio.h" int main() { int a ...
- 杭电1998 奇数阶魔方
奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu 1998 奇数阶魔方 规律
题目链接 奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- HDU:1998 奇数阶魔方(规律填数)
奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- java编程之数字魔方(N阶数字魔方和数字旋转魔方)
N阶数字魔方 原理: 定义一个奇数阶二维数组,把每个元素顺序填入不同的自然数,要求行列和对角线元素相加的结果相等. 效果图: 实现代码: import java.util.*; public clas ...
- NYOJ 734 奇数阶魔方
奇数阶魔方 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n ...
最新文章
- asp.net MVC2 Jquery
- 谷歌如何通过机器学习实现逼真AR实时自拍效果
- 机器视觉基础(2)---坐标与矩阵变换
- Java实现最电话号码的简单加密源码
- 大数据时代,怎么做全渠道的营销
- 输入学号查询课程c语言,广工c语言课程设计
- Ajax Session Timeout处理
- (混沌序列统计特性)离散傅里叶测试---matlab
- 计算机文本格式含义,文本格式是什么意思
- 第一百二十一天 : varnish
- 嘿嘿各位兄弟姐妹们,赚钱是一个男人最大的底气和尊严!
- 大数据领域十大必读书籍
- 熊猫互娱破产清算,王健林又给王思聪成立新公司了?
- 文思海辉 墨尔本_如果您在墨尔本,请来看看我们的圣诞礼物!
- 胖葵酒店管理系统(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)
- 实现了代码自动生成,开发效率妥妥的提升,升职加薪跟上
- 关于亚信安全防毒墙网络版客户端的退出与卸载(2020年亲测有效,经验分享)
- 系统启动时显示“NTLDR is missing”而无法进入系统的解决方法
- 第一篇博客-小白的HTML知识点汇总(一)
- 3、ClickHouse表引擎-MergeTree引擎
热门文章
- amazon_如何将Amazon Echo或Echo Dot恢复出厂设置
- 什么是百度特效搜索?百度搜索什么有特效?---黑洞
- Thinkpad R61I 驱动下载及安装方法 for windows 2003
- 达梦数据库更新License
- 划分春夏秋冬四季的气象学标准
- 如何为vs2017安装svn
- 在找工作的过程中,面试一定要经历的逻辑推理题...
- Aizu-2200-floyd+dp
- STEP7 V5.7安装包下载链接及安装教程
- html表格单行溢出省略号,单行、多行文本溢出显示省略号(css、js两种方法)