题目来源于:
牛客网华为机试题:
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e?tpId=37&&tqId=21258&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking
输入:输入正整数N(N不大于100)
输出:输出一个N行的蛇形矩阵。
例如:
输入:
5
输出:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
我的解题思路:
1、 我是斜着看:1,2 3,4 5 6,7 8 9 10,11 12 13 14 15;这样看比较好取数,不涉及计算
2、 打印,第一行为n个数,每个数倒着取刚才取出的字符串里面的数字
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class HJ035SnakeMatrix {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s=br.readLine()) != null){
            int n = Integer.parseInt(s);
            int cur = 1;
            //我是斜着看:1,2 3,4 5 6,7 8 9 10,11 12 13 14 15;这样看比较好取数,不涉及计算
            String[] arr = new String[n];
            for (int i = 0; i < n; i++) {
                StringBuilder tmp = new StringBuilder();
                for (int j = 0; j <= i; j++) {
                    arr[i] = tmp.append(cur).append(" ").toString();
                    cur++;
                }
            }
            //中间debug,输出[1 , 2 3 , 4 5 6 , 7 8 9 10 , 11 12 13 14 15 ]
            System.out.println(Arrays.toString(arr));
            //打印,第一行为n个数,每个数倒着取刚才取出的字符串里面的数字
            for (int i = 0; i < n; i++) {
                for(int j = i; j < n ; j++){
                    // 这里的j-i的取值很重要,举例说明:
                    // 当i=0,j=0时,arr[j] = 0, tmp.split(" ")[j-i] = 1;
                    // 当i=0,j=1时,arr[j] = 2 3, tmp.split(" ")[j-i] = 3;
                    // 当i=0,j=2时,arr[j] = 4 5 6, tmp.split(" ")[j-i] = 6;
                    // 以此类推,打印出第一行:1 3 6 10 15
                    String tmp = arr[j];
                    String output = tmp.split(" ")[j-i];
                    System.out.print(output + " ");
                }
                System.out.println();
            }
        }
    }
}