用友笔试0906

四道 Coding,难度偏低

1、问题抽象出来和 *********** 跳跃游戏一样,贪心维护最右边界

2、类似于 *********** 三数之和,只不过这道题按索引组合,并且允许重复选取,双指针

3、点石成金

对于一个 n*m 的房间,每次在地面上选择一个点,地面会以这个点为中心,以正方形扩散变成金子,直到遇到墙壁或者已经变成金子的地面时,扩散停止,问最少需要多少次,可以使整个房间的地面都变成金子

输入两个数 n 和 m,输出最少次数

测试用例

输入 3,2

输出 3

说明:先点 2*2,再点 1*1,再点 1*1

输入 8,5

输出 5

说明:先点 5*5,再点 3*3,再点 2*2,再点 1*1,再点 1*1

下面代码只能过 70%,搞不清楚为什么,求大佬帮忙看看

public class Test {
    static int cnt = 0;
    public static void main(String[] args) throws ClassNotFoundException {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        dfs(n, m);
        System.out.println(cnt);
    }

    private static void dfs(int n, int m) {
        if(n == m) {
            cnt++;
            return;
        }
        int l = Math.max(n, m);
        int w = Math.min(n, m);
        cnt++;
        dfs(w, l - w);
    }
}

4、暴力回溯

全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务