[Java] 纯文本查看 复制代码
public static void main(String[] args) {
int n = 4; //定义数组长
int[][] arr = new int[n][n]; //定义二维数组
int min = 1; //定义数组中最小的数
int count = 0; //定义圈数
fun(n,arr,min,count);
for (int i = 0; i < n; i++) { //遍历数组并打印
System.out.println(Arrays.toString(arr));
}
}
/*
* 定义方法:
* 返回值类型 void
* 参数列表(int n,int[][] arr,int min ,int count)
*/
public static void fun(int n,int[][] arr,int min ,int count) {
for (int i = 0; i <= (n-1)*4 ; i++) { //设置循环用来给数组赋值
if(n == 0){ //如果组长为0则跳出循环
break;
}
if(n == 1){ //如果组长为1则赋值并跳出循环
arr[count][count] = min;
break;
}
if(i < n-1){ //第一组,数组向右赋值
arr[count][count+i%(n-1)] = min++;
} else if (i < (n-1)*2){ //第二组,数组向下赋值
arr[count+i%(n-1)][count+n-1] = min++;
} else if (i < (n-1)*3) { //第三组,数组向左赋值
arr[count+n-1][count+n-1-i%(n-1)] = min++;
} else if (i < (n-1)*4){ //第四组,素组向上赋值
arr[count+n-1-i%(n-1)][count] = min++;
} else { //当一圈赋值完毕,圈数加一,边长减二,递归调用
fun(n-2,arr,min,count+1);
}
}
}
[AppleScript] 纯文本查看 复制代码
public class Test {
public static void main(String[] args) {
System.out.println("请输入圈数:");
Scanner sc = new Scanner(System.in);
int quan = sc.nextInt();
int[][] arr = new int[quan][quan];
int fangxiang = 1;//1,2,3,4分别代表右,下,左,上
//计数变量
int num = 1;
//行数
int h = 0;
//列数
int l = 0;
//开始输入
while(num <= quan * quan) {
//将num存入数组并加一
arr[h][l] = num;
num++;
//判断下一步的方向并执行相应操作
switch(fangxiang) {
case 1:
if(l + 1 < quan && arr[h][l + 1] == 0) {//索引不越界,并且在该方向上下一个值未被赋值
l++;//沿方向增长
}else {
fangxiang = 2;//改变方向
h++;//沿方向增长
}
break;
case 2:
if(h + 1 < quan && arr[h + 1][l] == 0) {
h++;
}else {
fangxiang = 3;
l--;
}
break;
case 3:
if(l - 1 >= 0 && arr[h][l - 1] == 0) {
l--;
}else {
fangxiang = 4;
h--;
}
break;
case 4:
if(h - 1 >= 0 && arr[h - 1][l] == 0) {
h--;
}else {
fangxiang = 1;
l++;
}
break;
default:
}
}
sc.close();
//遍历输出数组
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
System.out.println();
}
}
}