2023 科大讯飞笔试题 非凡计划 0729
笔试时间:2023年7月29日 非凡计划
第一题
题目:将企鹅击落水中最小的力
牛牛发明了一款破冰行动的游戏,假设在河面上,有n块紧密相连的冰块。标号1-n。将一只企鹅放到任意一个标号为K的冰块上,现在通过打破一些冰块来使得企鹅掉落河中,然而他无法打破企鹅所踩的冰块k。每个冰块都有不同的强度Ai ,所以需要一个等于Ai的力来打破冰。当冰块(两侧的冰块都没有与河两岸连接时,则冰块会掉落到河中。冰块1和冰块4可以通过分别施加7和2的力来打破,此时企鹅所在的冰块2和冰块3一起掉落河中。所以企鹅将落下。所以,可以使企鹅掉落的最小力是2+7=9。
输入描述
第一行给出n,表示冰块的数量。第二行中,按顺序给出代表打破第i块冰块所需的力的Ai。题目保证企鹅所在的地方用-1表示,没有企鹅位于冰块1或冰块n的情况。3<=n<=2*10^5
1<=Ai<=10^9
输出描述
输出可以击落企鹅到水中的最小力。
样例输入
5
7 -1 6 2 5
样例输出
9
找到-1的位置且找到该位置坐标的最小值和右边的最小值之和即可。
参考题解
C++:
#include <iostream> #include <vector> int main() { int n; std::cin >> n; std::vector<int> a(n); for (int i = 0; i < n; i++) { std::cin >> a[i]; } for (int i = 0; i < n; i++) { if (a[i] == -1) { int p1 = i - 1, p2 = i + 1; int min1 = INT_MAX, min2 = INT_MAX; while (p1 >= 0) { min1 = std::min(min1, a[p1--]); } while (p2 < n) { min2 = std::min(min2, a[p2++]); } std::cout << min1 + min2 << std::endl; return 0; } } return 0; }
Java:
import java.util.*; class Main { public static void main(String[]args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] a = new int[n]; for (int i = 0 ; i < n ; i++) a[i] = sc.nextInt(); for (int i = 0 ; i < n ; i++) { if (a[i] == -1) { int p1 = i-1, p2 = i+1; int min1 = Integer.MAX_VALUE, min2 = Integer.MAX_VALUE; while (p1 >= 0) { min1 = Math.min(min1, a[p1--]); } while (p2 < n) { min2 = Math.min(min2, a[p2++]); } System.out.println(min1 + min2); return; } } } }
第二题
题目:数组的最小距离
小红定义两个数组之间的距离为
即每个位置的差的绝对值之和。小红现在可以进行任意次操作,选择任意数组的任意一个元素,使其乘以-1。小红希望最终两个数组的距离尽可能小。你能帮帮她吗?
输入描述
第一行输入一个正整数, 代表两个数组的长度。第二行输入n个
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。