蓝桥杯历届试题:数字三角形

问题描述:

在这里插入图片描述

输入输出格式:

在这里插入图片描述

样例输入:

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 4

代码思路:

起初做这道题的时候,将题理解为在任何状态下向左走的次数与向右走的次数相差小于1,后面才知道,是最终状态时向左走的次数与向右走的次数相差小于1,则可以定义一个二维数组,行和列都是n+1,从1开始进行赋值,令nums[i][j] += Math.max(nums[i-1][j-1], nums[i-1][j]),最后对n进行判断(因为题目中说明向左和向右的次数相差小于1),如果n为奇数,则输出中间的那个数即nums[n][n/2],如果n为偶数,则输出中间哪两个较大的数即Math.max(nums[n][n/2] , nums[n][n/2+1])。

import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] nums = new int[n + 1][n + 1];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                nums[i][j] = sc.nextInt();
                nums[i][j] += Math.max(nums[i - 1][j - 1], nums[i - 1][j]);
            }
        }
        if (n % 2 == 1) {
            System.out.println(nums[n][(n + 1) / 2]);
        } else {
            System.out.println(Math.max(nums[n][n / 2], nums[n][n / 2 + 1]));
        }
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值