左蛇
1   2   6   7  15  
3   5   8  14  16
4   9  13  17  22
10 12  18  21  23
11 19  20  24  25java

解决方案 »

  1.   

    public static void snake(int s) { int len = s;
    int[][] a = new int[len][len];
    int n = 1; for (int i = 0; i < 2 * len - 1; i++) {
    for (int j = 0; j <= i; j++) {
    if (i - j > len - 1 || j > len - 1)
    continue;
    if (i % 2 == 0) {
    a[i - j][j] = n++;
    } else {
    a[j][i - j] = n++;
    }
    }
    } for (int i = 0; i < a.length; i++) {
    for (int j = 0; j < a[i].length; j++) {
    System.out.print(a[i][j] + "\t");
    }
    System.out.println();
    } }
      

  2.   

    public static void leftSnake(int n) {
    int[][] a = new int[n][n];
    int num = 1;
    // 左上半部分
    for (int i = 0; i < n; i++) {
    for (int j = 0; j <= i; j++) {
    if (i % 2 == 1) {// 旋转
    a[j][i - j] = num++;
    } else {
    a[i - j][j] = num++;
    }
    } }
    // 右下部分
    for (int i = n - 2; i >= 0; i--) {
    for (int j = 0; j <= i; j++) {
    if (i % 2 == 0) {// 旋转
    a[n - 1 - j][n - 1 - i + j] = num++;
    } else {
    a[n - 1 - i + j][n - 1 - j] = num++;
    }
    } }
    // 打印矩阵
    for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
    System.out.print(a[i][j] + "\t");
    }
    System.out.println();
    }
    }自己研究出来的答案,不过六楼的答案比较巧妙,略过不合适的循环,使两个循环合成一个了