用友笔试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、暴力回溯