数字三角形

个人学习记录 理解可能不是很充分 有不足望指教 废话不多说先上代码

import java.util.Scanner;

public class Main {
        public static void main(String args[]){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[][]a = new int[n+1][n+1];
            for(int i=1 ; i<=n ; i++){
                for(int j=1 ; j<=i ; j++){
                    a[i][j] = sc.nextInt();
                }
            }
            for(int i=1 ; i<=n ; i++){
                for(int j=1 ; j<=i ; j++){
                    a[i][j]+= Math.max(a[i-1][j-1], a[i-1][j]);
                }
            }
            if (n%2==0){
                System.out.println(Math.max(a[n][n/2],a[n][n/2+1]));
            }else {
                System.out.println(a[n][n/2+1]);
            }
        }

}

看到数字三角型 首先想到的就是用数组来解决 

  先赋值,赋值后for循环 从第一层开始 往下走 第一层就一个数是不用管的 向下走 因为向下一场走的要求是左右最近的最大的数 所以用一个max函数比较下一场两个数之间大的一方 比较出大的数与上一层的数相加如此直到最后

  在最后输出的时候就要判断一下三角形的层数,如果是偶数 最大路径数就是最后一层中间两个中的一个 如果是奇数的话 必是最后一层中间的数

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值