秋招日寄|小米校招笔试题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; }#通信硬件人笔面经互助#