题目来源于:
牛客网华为机试题:
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();
}
}
}
}