题目描述
题目说明
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
样例输入
5样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11输入描述:
输入正整数N(N不大于100)
输出描述:
输出一个N行的蛇形矩阵。
示例1
输入
4
输出1 3 6 10
2 5 9
4 8
7
代码实现:
- 方法一
思路:充分利用行和列的控制,没有特意根据函数表达式得出规律
package cn.c_shuang.demo35;
import java.util.Scanner;
/**
* 蛇形矩阵
* @author Cshuang
*
*/
public class Main {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
while(in.hasNext()){
int n=in.nextInt();
int start=1;//每一行的起始值
int temp;//每一点的值
StringBuilder sb=new StringBuilder();
for (int i = 1; i <= n; i++) {//i控制累加的行数,j控制列
temp=start;
sb.append(start+" ");
//令j=i+1,j是每一点到下一点需要累加的大小,然后j<=n,控制了累加的次数
for (int j = i+1; j <=n; j++) {
temp+=j;//j每次累加到当前点后,还需要把累加后的值赋值给temp
if(j==n){
sb.append(temp+"\n");
continue;
}
sb.append(temp+" ");
}
start+=i;//每一行的起始值在变,恰好i的变化符合,start变化,所以要+i
}
//输出需要trim(),消除字符串首尾出现的空格,否则在牛客oj平台上出现输出格式错误
System.out.println(sb.toString().trim());
}
in.close();
}
}
- 方法二:
思路:纯粹数学递推公式
import java.util.Scanner;
public class Main {
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= n; i++) {
//寻找每一行起始点值的规律,以及每次累加的规律
for (int j = 1, start = (i - 1) * i / 2 + 1, step = i + 1;
j <= n - i + 1; j++, start += step, step++) {
builder.append(start).append(' ');
}
// 设置换行符
builder.setCharAt(builder.length()-1, '\n');
}
System.out.print(builder.toString());
}
}
}