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 秋招笔试题汇总解析 文章被收录于专栏

2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

全部评论

相关推荐

点赞 评论 收藏
分享
Natrium_:这时间我以为飞机票
点赞 评论 收藏
分享
8 11 评论
分享
牛客网
牛客企业服务