/*
 * 어디서 잠깐 봤더니 이걸 달팽이 알고리즘이라고 하더군요.
 * 이차원 배열에 숫자를 담는데 달팽이 처럼 뱅뱅 돌면서 숫자를 집어 넣는거죠.
 * 예전엔 빡시게 했던 기억이 있었는데 재귀를 사용하니 아주 쉽네요.
 *
 *     1  2  3   4  5   6  7   8  9
 *   32 33 34 35 36 37 38 39 10
 *   31 56 57 58 59 60 61 40 11
 *   30 55 72 73 74 75 62 41 12
 *   29 54 71 80 81 76 63 42 13
 *   28 53 70 79 78 77 64 43 14
 *   27 52 69 68 67 66 65 44 15
 *   26 51 50 49 48 47 46 45 16
 *   25 24 23 22 21 20 19 18 17
 */

 

public class Snail {

    static int rowStart, rowEnd = 9, colStart, colEnd = 9, cnt;
    static int[][] arr;

 

    public static void main(String[] args) {
        arr = new int[rowEnd][colEnd];
        cnt = 1;
        drawSnail();

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] < 10)
                    System.out.print(" ");
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

 

    static void drawSnail() {
        for (int i = colStart; i < colEnd; i++)
            arr[rowStart][i] = cnt++; //가로 우측방향
        rowStart++;

        if (rowStart >= rowEnd)
            return; // 더 이상 진행할 곳이 없음

        for (int i = rowStart; i < rowEnd; i++)
            arr[i][colEnd - 1] = cnt++; // 세로 아래방향
        colEnd--;

        for (int i = colEnd - 1; i >= colStart; i--)
            arr[rowEnd - 1][i] = cnt++; // 가로 좌측방향
        rowEnd--;

        if (colStart >= colEnd)
            return;  // 더 이상 진행할 곳이 없음

        for (int i = rowEnd - 1; i >= rowStart; i--)
            arr[i][colStart] = cnt++; // 세로 윗방향
        colStart++;

        drawSnail(); // recursive call
    }

 

}

http://blog.naver.com/PostView.nhn?blogId=whosnext&logNo=100019325077&redirect=Dlog&widgetTypeCall=true

여기서 숫자 줄어드는 걸로 바꾸면 됩니다.