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阶魔方方阵相关推荐

  1. java 魔方_2 java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟 游戏 Develop 246万源代码下载- www.pudn.com...

    开发工具: Java 文件大小: 3830 KB 上传时间: 2015-11-07 下载次数: 0 详细说明:java实现4阶魔方,通过运行代码,鼠标进行旋转,可以模拟魔方游戏-java achiev ...

  2. java计算奇数阶魔方阵

    一.提出问题 所谓"奇数阶魔方阵"是指n为不小于3的奇数的魔方阵.这类魔方阵的形式多样,这里我们仅讨论其中的一种形式的正规魔方阵.例如:3阶.5阶和7阶的魔方阵如图3 – 4 所示 ...

  3. 任意阶魔方阵matlab程序,【精品】任意阶魔方阵算法(c语言)

    n阶幻方是由前n^2(n的2次方)个自然数组成的一个n阶方阵,其各行.各列及两条对角线所含的n个数的和相等.洛书就是最基本的3×3阶魔方阵,做出某种最恰当的决定,横竖都有3个格. 0的倒数 a-1可以 ...

  4. 3阶魔方阵c语言算法,3阶魔方阵的算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include "stdlib.h" #include "stdio.h" int main() { int a ...

  5. 杭电1998 奇数阶魔方

    奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. hdu 1998 奇数阶魔方 规律

    题目链接 奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  7. HDU:1998 奇数阶魔方(规律填数)

    奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. java编程之数字魔方(N阶数字魔方和数字旋转魔方)

    N阶数字魔方 原理: 定义一个奇数阶二维数组,把每个元素顺序填入不同的自然数,要求行列和对角线元素相加的结果相等. 效果图: 实现代码: import java.util.*; public clas ...

  9. NYOJ 734 奇数阶魔方

    奇数阶魔方 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n ...

最新文章

  1. asp.net MVC2 Jquery
  2. 谷歌如何通过机器学习实现逼真AR实时自拍效果
  3. 机器视觉基础(2)---坐标与矩阵变换
  4. Java实现最电话号码的简单加密源码
  5. 大数据时代,怎么做全渠道的营销
  6. 输入学号查询课程c语言,广工c语言课程设计
  7. Ajax Session Timeout处理
  8. (混沌序列统计特性)离散傅里叶测试---matlab
  9. 计算机文本格式含义,文本格式是什么意思
  10. 第一百二十一天 : varnish
  11. 嘿嘿各位兄弟姐妹们,赚钱是一个男人最大的底气和尊严!
  12. 大数据领域十大必读书籍
  13. 熊猫互娱破产清算,王健林又给王思聪成立新公司了?
  14. 文思海辉 墨尔本_如果您在墨尔本,请来看看我们的圣诞礼物!
  15. 胖葵酒店管理系统(android客户端+javaweb服务端+腾讯云服务器+腾讯云数据库)
  16. 实现了代码自动生成,开发效率妥妥的提升,升职加薪跟上
  17. 关于亚信安全防毒墙网络版客户端的退出与卸载(2020年亲测有效,经验分享)
  18. 系统启动时显示“NTLDR is missing”而无法进入系统的解决方法
  19. 第一篇博客-小白的HTML知识点汇总(一)
  20. 3、ClickHouse表引擎-MergeTree引擎

热门文章

  1. amazon_如何将Amazon Echo或Echo Dot恢复出厂设置
  2. 什么是百度特效搜索?百度搜索什么有特效?---黑洞
  3. Thinkpad R61I 驱动下载及安装方法 for windows 2003
  4. 达梦数据库更新License
  5. 划分春夏秋冬四季的气象学标准
  6. 如何为vs2017安装svn
  7. 在找工作的过程中,面试一定要经历的逻辑推理题...
  8. Aizu-2200-floyd+dp
  9. STEP7 V5.7安装包下载链接及安装教程
  10. html表格单行溢出省略号,单行、多行文本溢出显示省略号(css、js两种方法)