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多种语言分析,解答。