java蛇形填数

在n*n方阵里填入1,2,…,n*n,要求填成蛇形。例如n=4时方陈阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

思路:先建一个二维数组,在这个数组里面填数。
写一个方法,参数是 一个二维数组arr,填数的起始位置 m n,填的第一数字,对于main方法中就是先把 建立的数组、右上角的位置的坐标,填的第一个1,传到方法中,打印最外层的一圈,再利用递归打印 里面的每一圈,每次递归传的数组不便,m+1,n-1(里面的一圈的坐标的起始位置就是行数加一,列数减一),要填的第一个数 是你再填外圈时 每次加1后得到的值,就这样利用递归,得出蛇形。

package nyoj;

import java.util.Arrays;
import java.util.Scanner;

public class S_Shape {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        int[][] arr = new int[num][num];
        tian(arr,0,arr.length-1,1);  //传一个 数组,起始位置(0,length-1),打印的数 从1开始
        for(int i =0 ;i<arr.length;i++) {
            for(int j = 0;j<arr[i].length;j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }

    }
    public static void tian(int[][] arr,int m,int n,int b) {

        for(int i=m;i<=n;i++) {   
            arr[i][n] = b;
            b++;
        }
        for(int j = n-1;j>=m;j--) { 
            arr[n][j] = b;
            b++;
        }
        for(int i=n-1;i>=m;i--) { 
            arr[i][m] = b;
            b++;
        }

        for(int j = m+1;j<n;j++) {  
            arr[m][j] = b;
            b++;
        }
        n = n-1;
        m= m+1;
        if(n>=1) {
            tian(arr,m,n,b);
        }

    }
}

输入6,得到的结果

猜你喜欢

转载自blog.csdn.net/Lu_Xiao_Yue/article/details/81837320