秋招日寄|小米校招笔试题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;
}
#通信硬件人笔面经互助#SAGIMA笔面经整理 文章被收录于专栏
本人在秋招过程中的一些笔试和面经,尽可能的结构化、系统化的整理了,有些细节可能记不太清,大家可以随便提问,肯定知无不言言无不尽!

