秋招日寄|小米校招笔试题1-软件开发方向笔试20240905

试卷名称:2025届校招笔试题1-软件开发方向

考试时长:90分钟

开始时间:2024-09-05 16:00 星期四

结束时间:2024-09-05 17:30 星期四

第一题:单选*23,软件开发综合知识;

第二题:多选*2;

第三题:编程*2。

编程题1:

题目描述:
小A每天都要吃a,b两种面包各一个。而他有n个不同的面包机,不同面包机制作面包的时间各不相同。第i台面包机制作a面包
需要花费ai的时间,制作b面包则需要花费bi的时间。
为能尽快吃到这两种面包,小A可以选择两个不同的面包机x,y同时工作,并分别制作a,b两种面包,花费的时间将是
max(ax,by)。 
当然,小A也可以选择其中一个面包机x制作a,b两种面包,花费的时间将是ax+bx。
为能尽快吃到面包,请你帮小A计算一下,至少需要花费多少时间才能完成这两种面包的制作。

输入描述:
第一行一个正整数n,表示面包机的个数。
第二行n个正整数ai,表示面包机制作面包a的时间。
第三行n个正整数bi,表示面包机制作面包b的时间。
n ≤ 100000;
a,b ≤ 100000;

输出描述:输出一行一个正整数,表示需要花费的最少时间。

示例输入1:
3
2 5 9
4 3 6

输出:
3

示例输入2:
3
2 5 7
2 8 6

输出:
4

答案:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    vector<int> a(n);
    vector<int> b(n);
    
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++) cin >> b[i];
    
    int min_time_same_machine = 1000000;
    for (int i = 0; i < n; i++) min_time_same_machine = min(min_time_same_machine, a[i] + b[i]);
    
    int min_a = 1000000, second_min_a = 1000000;
    int min_b = 1000000, second_min_b = 1000000;
    int min_a_index = -1, min_b_index = -1;
    
    for (int i = 0; i < n; i++) {
        if (a[i] < min_a) {
            second_min_a = min_a;
            min_a = a[i];
            min_a_index = i;
        } 
        
        else if (a[i] < second_min_a) second_min_a = a[i];
        
        if (b[i] < min_b) {
            second_min_b = min_b;
            min_b = b[i];
            min_b_index = i;
        } 
        
        else if (b[i] < second_min_b) second_min_b = b[i];
    }
    
    int min_time_different_machine;
    if (min_a_index != min_b_index) min_time_different_machine = max(min_a, min_b);
    else min_time_different_machine = min(max(min_a, second_min_b), max(second_min_a, min_b));
    
    int result = min(min_time_same_machine, min_time_different_machine);
    
    cout << result << endl;
    return 0;
}

编程题2:

题目描述:
给一个长度为n的序列和一个整数x,每次操作可以选择序列中的一个元素,将其从序列中删去,或者将其值加一。
问至少操作多少次,可以使操作后的序列(可以为空)中数字之和是x的倍数。

输入描述:
第一行两个用空格隔开的正整数n和x,含义如问题描述中所述。
第二行是n个用空格隔开的正整数A[1],A[2],…,A[n],表示序列中n个元素的值。
n ≤ 1000,x ≤ 1000,A ≤ 1000

输出描述:一行一个整数,表示使序列中数字之和是x的倍数所需要的最少操作数。

样例输入1:
1 3
4

样例输出:
1

解释:直接将序列中唯一的元素删去即可。

输入样例2:
3 5
1 3 3

输出:
2

解释:可能的一种操作为,删去最后一个元素,再使第一个元素加一,得到的序列为2 3。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n, x;
    cin >> n >> x;
    
    vector<int> A(n);
    for (int i = 0; i < n; ++i) cin >> A[i];
    
    int INF = 1000;
    vector<vector<int>> dp(n + 1, vector<int>(x, INF));
    dp[0][0] = 0;  

    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < x; ++j) {
            dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + 1);

            for (int k = 0; k < x; ++k) {
                int new_mod = (j + (A[i] + k) % x) % x;
                dp[i + 1][new_mod] = min(dp[i + 1][new_mod], dp[i][j] + k);
            }
        }
    }

    cout << dp[n][0] << endl;
    return 0;
}

#通信硬件人笔面经互助#
全部评论
动态规划真不会😭
4 回复 分享
发布于 09-05 17:35 辽宁
我就想知道那个输入输出到底咋调啊,😭😭,后面几乎都在调那个
2 回复 分享
发布于 09-05 17:37 北京
已经结束辣!
2 回复 分享
发布于 09-06 12:04 山东
请问,可以选择用C写吗
1 回复 分享
发布于 09-15 15:01 江苏
第一道题我也是这么写的,为什么过不去测试用例,哭了
点赞 回复 分享
发布于 09-05 17:52 陕西
dp不会😭
点赞 回复 分享
发布于 09-05 18:03 安徽
盖亚!!!
点赞 回复 分享
发布于 09-05 21:45 黑龙江
想问一下小米都是过了一面才发笔试吗
点赞 回复 分享
发布于 09-06 00:13 广东
啊啊啊,太离谱了,无法调试,我不小心把循环条件写错了,然后一直报错,找不到原因,框架都写对了考完才发现错误,我哭死
点赞 回复 分享
发布于 09-06 11:48 江苏
点赞 回复 分享
发布于 09-06 14:10 上海
寄了,本来没想投底软开发的,也没刷过题,感觉好难呀
点赞 回复 分享
发布于 09-06 19:23 辽宁
选择考什么内容呀
点赞 回复 分享
发布于 09-07 22:08 北京
楼主你好,我想问一下选择题主要考哪些方面的呀?计算机网络和操作系统还是语言相关的呀?
点赞 回复 分享
发布于 09-15 15:28 浙江
第二题解答,不知道对不对,大家看下。。
点赞 回复 分享
发布于 09-18 11:47 上海
不是哥们,这么难吗。我平时就用dsp搞项目搞实验,我是不是投错岗了
点赞 回复 分享
发布于 09-18 15:00 重庆
选择题大概都是哪部分内容呢
点赞 回复 分享
发布于 10-18 10:38 河北
为啥我安全岗也是考开发啊?
点赞 回复 分享
发布于 10-18 17:58 吉林

相关推荐

31 120 评论
分享
牛客网
牛客企业服务