java螺旋数组

来源:互联网 发布:大数据 文化产业 编辑:程序博客网 时间:2024/05/19 02:06

这里写图片描述

import java.util.Scanner;/** * 输出螺旋数组(N*M) * @author msidolphin * */public class Main {    public static void main(String[] args) {        Scanner in = new Scanner(System.in);        int N = in.nextInt();        int M = in.nextInt();        in.close();        int[][] array = new int[N][M];        //左上角和右下角坐标        int x1 = 0;        int y1 = 0;        int x2 = N - 1;        int y2 = M - 1;        int k = 1;        while(true) {            //针对当两点处于同一行的情况            if(x1 - x2 == 0 && y1 <= y2) {                for(int i = y1 ; i <= y2 ; ++i ) {                    array[x1][i] = k;                    k++;                }                break;            }            //如果两点重合或错开,则数组构造完毕            if(x2 - x1 <= 0 && y2 - y1 <= 0) {                break;            }            int x3 = x1;    //暂存x1 y1 x2 y2的值            int y3 = y1;            int x4 = x2;            int y4 = y2;            while(true) {                if(x1 < x2) {                    array[x1][y1] = k;                    k++;                    if(y1 == y2) {                        x1++;                    }else {                        y1++;                    }                }else {                    break;                }            }            while(true) {                if(x2 > x3){                    array[x2][y2] = k;                    k++;                    if(y2 == y3) {                        x2--;                    }else {                        y2--;                    }                }else {                    break;                }            }            //左上角坐标向右下移一个单位,右下角向上移一个单位            x1 = x3 + 1;            y1 = y3 + 1;            x2 = x4 - 1;            y2 = y4 - 1;            //两点重合,在结束循环前赋值            if(x1 == x2 && y1 == y2) {                array[x1][y1] = k;            }        }        //打印数组        for(int i = 0 ; i < N ; ++i) {            for(int j = 0 ; j < M ; ++j) {                System.out.print(array[i][j] + "    ");            }            System.out.println();        }    }}

7 X 11
测试7*11

1X10
极端一点...

0 0