侧边栏壁纸
博主头像
这就是之谦博主等级

我们的征途是星辰大海

  • 累计撰写 182 篇文章
  • 累计创建 3 个标签
  • 累计收到 16 条评论
标签搜索

目 录CONTENT

文章目录

金山云笔试21.9.24

这就是之谦
2021-09-24 / 0 评论 / 0 点赞 / 696 阅读 / 1,625 字
温馨提示:
本文最后更新于 2021-09-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

金山云笔试21.9.24

代码题:聪明的老鼠

【只A出了这一个,惭愧】

一只聪明的老鼠发现了一个三角形的奶酪迷宫。这个迷宫有若干个小房间,每个小房间有若干块大小相等的小奶酪(每个房间至少有一块奶酪)。 奶酪迷宫的构造如下: (1) 奶酪迷宫一共有N行,第1行有一个小房间,第2行有两个房间,第3行有三个小房间,......第N行有N个小房间。 (2) 所有的小房间都是从第1列开始进行排列的。 (3) 奶酪迷宫的入口是第1行的那个小房间。 (4) 由于奶酪迷宫的特殊构造,小老鼠进入一个房间后,不允许回退到上一层的房间,也不允许走到左边的房间,只允许走到右边或者下面的房间。 (5) 在奶酪迷宫的最后一层,每个房间都有一扇通往迷宫出口的门,且最后一层的小房间没有通往左边和右边小房间的门。 现在小老鼠已经知道了每个小房间里面有多少块小奶酪,它找到了一条可以从入口走到出口且可以得到最多小奶酪的路径。 你能不能编写一个程序,输出小老鼠最多可以得到多少块小奶酪呢?

输入:
3
2
4 5
1 2 3
输出:
13

我的思路:

二维数组存储,每个数据=(本身+上边)或者(本身+左边),取max

需要考虑边界值

注意:最后一行数据只=(本身+上),因为最后一层的小房间没有通往左边和右边小房间的门

package com.lxw.jinshan;

import java.util.Scanner;

public class Main {

    static int n;
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt();
        int[][] a = new int[110][110];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i+1; j++) {
                int x = scanner.nextInt();
                a[i][j] = x;
            }

        }

        int next = findXXX(a);
        System.out.println(next);

    }

    public static int findXXX(int[][] a){
        
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j <= i; j++) {
                if (i==0&&j==0) continue;
                else if (i==0) ;
                else if (j==0) a[i][j]=a[i-1][j]+a[i][j];
                else a[i][j] = Math.max(a[i-1][j],a[i][j-1])+a[i][j];
            }
        }
        int max = 0;
        for (int j = 0; j < n-1; j++) {
            if (a[n-1][j]+a[n-2][j]>max){
                max=a[n-1][j]+a[n-2][j];
            }
        }
        return max;

    }
}

0

评论区