华为OJ——蛇形矩阵

题目描述

  • 题目说明

    蛇形矩阵是由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());
        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值