来源:JK老班
题目:在n*n方阵里填入1,2,3,…,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出,n<=8。
输入:一个整数n,n≤8。
输出: n行,每行n个整数,用空格分隔。
样例输入
扫描二维码关注公众号,回复: 5695639 查看本文章4
样例输出
10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4
import java.util.Scanner;
//蛇形填数
public class P1469 {
int n;
int[][] A;
int num;//当前填的数字
public P1469() {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
A=new int[n][n];
num=1;//从1开始填
Search(0,n-1,n-1);//坐标,坐标,边长
//输出
for(int x=0;x<n;x++) {
for(int y:A[x]) System.out.print(y+" ");
System.out.println();
// for(int y=0;y<n;y++) {
// System.out.print(A[x][y]+" ");
// }
// System.out.println();
}
}
void Search(int x,int y,int len) {
if(len<0) return;//小于0什么都不做
if(len==0) {//等于0直接赋值
A[x][y]=num;
return;
}
int i=x,j=y;//记住当前传进来的起点
for(int k=0;k<len;k++) {//向下填
A[i][j]=num;
num++;
i++;
}
for(int k=0;k<len;k++) {//向左填
A[i][j]=num;
num++;
j--;
}
for(int k=0;k<len;k++) {//向上填
A[i][j]=num;
num++;
i--;
}
for(int k=0;k<len;k++) {//向右填
A[i][j]=num;
num++;
j++;
}
Search(x+1,y-1,len-2);
}
public static void main(String[] args) {
P1469 p=new P1469();
}}