🔥 9.23 华为笔试面经 - 编程题 & 题解
题目类型: 3 道编程题
考试时间: 2023-09-23 (两小时)
T1 分销粮食
粮食公司从农场收购了n吨粮食,现在需要平均分配给分销商进行销售(除不尽向下取整)。分销商数量若下,请计算分销商获得的粮食数量有几种可能。
输入
n: 粮食总量,0 < n <= 4294967295
输出
m:分销商获得的粮食数有几种可能
样例1
输入:
5
输出:
3
获得的粮食数量 | 5 | 2 | 1 | 1 | 1 | 0 | 0 | ... |
总共5吨粮食,分销商获得的粮食数量可能为5/2/1吨,3种。
样例2
输入:
7
输出:
4
获得的粮食数量 | 7 | 3 | 2 | 1 | 1 | 1 | 1 | 0 | ... |
总共7吨粮食,分销商获得的粮食数量可能为7/3/2/1吨,4种。
题解
模拟
获得的粮食数量 avg = 粮食总量 n / 分销商 k
枚举分销商数量计算出所有的获得的粮食数量的情况数,即为答案。
分类讨论:
- avg == n / k && avg != k 此时 获得的粮食数量 有 avg 和 k 两种可能。
- avg == n / k && avg == k 此时只能算一种情况。
import java.util.Scanner;
// P1
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
long n = in.nextLong();
long cnt = 0, k = 1;
while (true) {
long avg = n / k;
// 必须这样优化,不然 ac 不了
if (avg > k) {
cnt += 2;
} else {
break;
}
k++;
}
if (k == n / k) cnt++;
System.out.println(cnt);
}
}
T2 糖果迷宫
小华和小为在一个两行m列的糖果迷官里,迷官的每位置上都有对立的糖果数目a[i][j],他们只能向右或者向下移动。
小华和小为都将从迷宫左上方a[0][0] 位置出发,向有下角a[1][m-1]走,每到一个位置都将吃掉这个位置上的糖果。
假设小华先走,他走完后会吃掉路过的糖果,然后小为才开始走,被小华吃掉的糖果,小为就不能再吃了。
小华希望小为吃掉最少的糖果总数,然后小为也希望在小华走完后自己能吃掉更多的糖果总数。
请你帮忙计算小为最多可以吃掉多少糖果。
输入
第一行包含一个整教m(1<=m<=100000),标识迷宫的宽度。
接下来包含两行,每行包含m个整教,每一个整数a[i][j] (1 <= a[i][j] <= 10000),代表该位置的糖果教目。
吃掉更多的糖果总数
输出
输出小为最多可以吃到多少糖果。
样例1
输入:
3
1 3 7
3 5 1
输出:
7
解释:
小华吃掉 1,3,5,1 ,小为吃掉 7。
样例2
输入:
1
4
7
输出:
0
题解
枚举
枚举小华所有的吃法情况(在什么位置向下走),求那种情况下小华吃后小为吃到的糖果最少。
import java.util.Scanner;
import java.util.stream.IntStream;
// P2
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int[][] a = new int[2][m];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < m; j++) {
a[i][j] = in.nextInt();
}
}
Solution solution = new Solution();
System.out.println(
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
📕分享大厂机试真题深度剖析核心考点,助你速通面试。