魔方阵冲呀
魔方阵的原理通俗点说就是
- 把1放到第一行中间位置
- 然后第二个数字向右上移动(行-1,列+1)
- 列超出行未超出,则放到(行-1,第一列)
- 行超出列未超出,则放到(最后一行,列加1)
- 行列均超出,则放到该元素的下边,也就是(行+1,列不变)
- 若移动后的位置有元素,则也放到该元素的下边,也就是(行+1,列不变)
package mefangzhen;
import java.util.Scanner;
public classpackage mefangzhen;
import java.util.Scanner;
public class Mfz {
public static void main (String []args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入魔方阵阶数");
int n=scanner.nextInt();
if(n%2==0||n<=0) {
System.out.print("请输入正确的阶数(n为正奇数)");
}else {
int[][] mf = new int [n][n];//定义n阶二维数组
//这里注意数组的初始值是0行0列,且创建后数组元素默认均为0
int x=0;//行数为0
int y=(n-1)/2;//设初始值
mf[x][y]=1;//将1到第一行中间处
int count=n*n;
for(int i=2;i<=count;i++) {//循环n方-1遍
x--;
y++;
if(x<0&&y<n) {//行超列未超
x=n-1;
}
if(x>=0&&y>=n) {//列超行未超
y=0;
}
if(x<0&&y>=n) {//行列均超过
x=x+2;
y=y-1;
}
if(mf[x][y]!=0){//均大于0,正常向右上走
x=x+2;
y=y-1;
}
if(mf[x][y]==0) {
mf[x][y]=i;
}
}
for(int g=0;g<n;g++) {
for(int h=0;h<n;h++) {
System.out.print(mf[g][h]+" ");
}
System.out.println("\n");
}
}
}
}
运行结果
第一次发csdn,以后会经常更新的,我们一定能编好代码!!!