• 大小: 4KB
    文件类型: .java
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: Java
  • 标签: 幻方  java  

资源简介

n阶幻方的求法(java代码版)。由于现在网上还没有系统的求n阶幻方的java代码,所以写出来供大家参考!

资源截图

代码片段和文件信息

package test03;
import java.util.Arrays;
import java.util.Scanner;

public class MagicSquare {

public static void main(String[] args) {
System.out.println(“请确定是几阶幻方“);
Scanner scan = new Scanner(System.in);
int a=scan.nextInt();
int[][] array=null;
if(a%2!=0){
array = getSingleArray(a1);
}else{
array=getDoubleArray(a);
}
for(int[] arr:array){
System.out.println(Arrays.toString(arr));
}
scan.close();
}
/**
 * 奇数阶幻方将最小的数放在第一行最中间,然后将下一个放在这个数的右上方;如果下一个的地方有数了则放在该数的下方
 * @param index:index表示幻方的阶数(奇数)
 * @param num:num表示幻方中最小的数
 * @return:返回满足幻方的数组
 */
public static int[][] getSingleArray(int indexint num){
//定义数组将最小的数放在数组第一行正中间
int[][] arr=new int[index][index];
arr[0][index/2]=num;
int x=0;int y=index/2;
//将最小数以后的数放入数组中
for(int i=num+1;i<=index*index+num-1;i++){
//xy为上个数的坐标把它们改为当前数的坐标
if(x-1<0){//x-1<0说明x坐标越界x变成x坐标的最大值;否则x-1就是当前数的横坐标
x=arr.length-1;
}else{
x=x-1;
}
if(y+1>arr.length-1){//y+1大于y的最大值说明y坐标越界y变为0;否则y+1就是当前数的纵坐标
y=0;
}else{
y=y+1;
}
while(true){
//判断得到的坐标是否有数
if(arr[x][y]==0){
//得到的坐标没数则直接将当前数赋给数组
arr[x][y]=i;
break;
}else{
//得到的坐标有数则获取上一个数的坐标x坐标+1作为现在的纵坐标继续循环直到xy对应的值是0赋值退出
int[] js = getIndex(arr i-1);
x=js[0]+1;
y=js[1];
if(x>arr.length-1){
x=0;
}
}
}
}
return arr;
}
/**
 * 
 * @param arr:目标数组
 * @param num:目标数(在arr数组中唯一)
 * @return:返回arr数组中num这个数的坐标(存放在数组中)
 */
public static int[] getIndex(int[][] arrint num){
int[] s=new int[2];
for(int i=0;i for(int j=0;j if(arr[i][j]==num){
s[0]=i;
s[1]=j;
}
}
}
return s;
}
/**
 * 偶数阶幻方
 * ps:不包含2阶幻方
 * @param len:幻方阶数因为不包含2

评论

共有 条评论