A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© AlphaCC 中级黑马   /  2016-3-6 15:05  /  1138 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

* 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。
* 如: n = 4 则打印:
* 1    2    3    4
* 12    13    14    5
* 11    16    15    6
* 10    9    8    7
public class Test7 {
    public static void main(String[] args) {
        int n = 4;
        System.out.print("n = ");
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();  //读取方阵大小
        int[][] arr;        
        arr = printCircle(n);
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                System.out.printf("%-5d", arr[i][j]);
            }
            System.out.println();
        }
    }
   
    private static int[][] printCircle(int N) {
        int i,j,k,l,m,n;
        int[][] num = new int[N][N];
        int var = 1; //填充的数字,每填充一次自增一次
        
        //方阵按口字形顺时针填充数据,循环(N+1)/2次
        for(i=0,n=N-1; i<(N+1)/2; i++,n--){
            //填充顶部
            for(j=i; j<=n; j++) {   //横坐标不变,纵坐标递增
                num[i][j] = var++;
            }
            //填充右边
            for(k=i; k<n; k++) {    //纵坐标不变,横坐标递增
                num[k+1][n] = var++;
            }
            //填充底部
            for(m=n-1; m>=i; m--) {  //横坐标不变,纵坐标递减
                num[n][m] = var++;
            }
            //填充左边
            for(l=n-1; l>i; l--) {   //纵坐标不变,横坐标递减
                num[l][i] = var++;
            }
        }
        return num;
    }
   
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马