平安科技历年秋招笔试真题
如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)
不收费,3人组团即可一块免费领取!限量免费10000个名额
手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2
电脑端请扫码领取:
1、鸡蛋掉落
【题目描述】你有 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= X <= N)。你的目标是确切地知道 F 的值是多少。无论 F 的初始值如何,你确定 F 的值的最小移动次数是多少?输入描述:输入两个数,(第一个数为K,第二个数为N)输出描述:返回最小移动次数输入样例:
1,2输出样例:
2
【解题思路】
动态规划
dp[k][n]表示k个鸡蛋n层楼至少要试几次。
枚举丢的楼层i,则dp[k][n] = min(dp[k][n-i], dp[k-1][i-1]) (对应没碎与碎)
【参考代码】
#include <bits/stdc++.h> using namespace std; const int N = 100 + 5; const int inf = 0x3f3f3f3f; int n, k; int dp[N][N]; int dfs(int k, int n) { if(k == 1) { return n; } if(n <= 1) { return 0; } int &ans = dp[k][n]; if(~ans) return ans; ans = inf; for(int i = 1; i <= n; ++i) { int tmp = min(dfs(k, n-i), dfs(k-1, i-1)) + 1; ans = min(ans, tmp); } return ans; } int main() { scanf("%d%d", &k, &n); memset(dp, -1, sizeof(dp)); printf("%d\n", dfs(k, n)); return 0; }
2、水壶问题
【题目描述】有两个容量分别为 x升和y升的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好z升的水?如果可以,最后请用以上水壶中的一或两个来盛放取得的z升水。
你允许进行以下三种操作:
1.装满任意一个水壶
2.清空任意一个水壶
3.从一个水壶向另外一个水壶倒水,直到装满或者倒空
输入描述:
三个数
输出描述:
布尔格式True/False
输入样例:
3,4,5
输出样例:
True
【解题思路】
dfs,枚举所有的操作。
【参考
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码