2023 华为笔试 华为笔试题 0923
笔试时间:2023年9月23日 秋招
第一题
题目:分销粮食
粮食公司从农场收购了n吨粮食,现在要要平均分配给分销商进行销售(除不尽向下取整)。分销商数量若干,请计算分销商获得的粮食数量有几种可能。
解答要求:时间限制: C/C++ 2000ms,其他语言: 4000m内存限制:C/C++256MB,其他语言:512MB。
输入描述
n:粮食总量,0<n<=4294967295。
输出描述
m:分销商获得的粮食数有几种可能。
样例输入
5
样例输出
3
参考题解
模拟。接受一个整数 n 作为输入,然后计算并输出 n 的因子个数
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <set>
int main() {
int n;
std::cin >> n;
std::set<int> res;
int i = 1;
while (true) {
res.insert(n / i);
if (n / i == 1) break;
i++;
}
std::cout << res.size() << std::endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.HashSet;
import java.util.Set;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
Set<Integer> res = new HashSet<>();
int i = 1;
while (true) {
res.add(n / i);
if (n / i == 1) break;
i++;
}
System.out.println(res.size());
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
n = int(input())
res = set()
i = 1
while True:
res.add(n//i)
if n // i == 1: break
i += 1
print(len(res))
第二题
题目:糖果迷富
小华和小为在一个两个m列的糖果迷宫里,迷宫的每一个位置上都有对应得糖果数目a[i][j],他们只能向右或者向下移动。小华和小为都将从左上方a[0[[0]位置出发,向右下角a[1,m-1]走去,每到一个位置都将吃掉这个位置上的糖果。假设小华先走,他走完后会吃模路过的糖果,然后小为才开始走,被小华吃掉的糖果,小为就能再吃了。小华希望小为吃掉最少的糖果总数,然后小为也希望在小华走完后自己能吃掉更多的糖果总数。请你帮忙计算小为最多可以吃掉多少糖果。
解答要求:时间限制:C/C++ 1000ms 其他语言2000ms,内存限制: C/C++ 256MB,其他语言:512MB。
输入描述
第一行包含一个整数m(1<=m<=100000),标识迷宫的宽度;
接下来包含两行,每行包含m个整数,每一个整数a[i]j代表该位置的糖果数目。
输出描述
输出小为最多可以吃到多少糖果。
样例输入
3
1 3 7
3 5 1
样例输出
7
参考题解
前缀模拟。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int m;
cin >> m;
vector<vector<int>> grid(2, vector<int>(m));
vector<vector<int>> qzs(2, vector<int>(m + 1));
for (int j = 0; j < m; j++) {
cin >> grid[0][j];
qzs[0][j + 1] = qzs[0][j] + grid[0][j];
}
for (int j = 0; j < m; j++) {
cin >> grid[1][j];
qzs[1][j + 1] = qzs[1][j] + grid[1][j];
}
long long ans = INT_MAX;
for (int i = 0; i < m; i++) {
int tmp = max(qzs[1][i], qzs[0][m] - qzs[0][i + 1]);
ans = min(ans, (long long)tmp);
}
cout << ans << endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int[][] grid = new int[2][m];
int[][] qzs = new int[2][m+1];
for (int j = 0; j < m; j++) {
grid[0][j] = sc.nextInt();
qzs[0][j+1] = qzs[0][j] + grid[0][j];
}
for (int j = 0; j < m; j++) {
grid[1][j] = sc.nextInt();
qzs[1][j+1] = qzs[1][j] + grid[1][j];
}
long ans = Integer.MAX_VALUE;
for (int i = 0; i < m; i++) {
int tmp = Math.max(qzs[1][i], qzs[0][m]-qzs[0][i+1]);
ans = Math.min(ans, tmp);
}
System.out.println(ans);
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
m = int(input())
grid = [[0] * m for _ in range(2)]
qzs = [[0] * (m + 1) for _ in range(2)]
for i in range(2):
row = list(map(int, input().split()))
for j in range(m):
grid[i][j] = row[j]
qzs[i][j + 1] = qzs[i][j] + grid[i][j]
an
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

