笔试时间 90min 20道选择题 + 3道编程题
主要还是考数据库的操作 如何增删查改 如何检索 然后阅读数据库代码 找错误/模拟运行
只有一道算法题 是AcWing_3578题 的变式 个人感觉算是降低难度
每次操作选取两个数 ai 与 aj, 并赋值ai = ai + aj, 删除aj;
中位数计算方式为为(m+1)/2向下取整。
输入第一行数据组数t 此后每组 第一行数组长度n 操作k数 第二行为数组
如
2
3 1
3 1 2
4 3
5 3 2 1
输出中位数
1
11
代码如下仅供参考:
#佳都科技##23届找工作求助阵地#
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//一共有t组数据
int t = scan.nextInt();;
int[] mid = new int[t];
//执行t次
for (int i = 0; i < t; i++) {
int n = scan.nextInt();
int k = scan.nextInt();
int[] num = new int[n];
//记录本组的数组数据
for (int j = 0; j < n; j++) {
num[j] = scan.nextInt();
}
//排序
Arrays.sort(num);
// 从最大的两个数开始
// 每次操作将最大的两数相加 num[n-j-1] + num[n-j]
// 并赋值给前面的一位数 后面的那位置0
for (int j = 1; j < k + 1; j++) {
num[n-j-1] = num[n-j-1] + num[n-j];
num[n-j] = 0;
}
//进行完k次操作后再排序
Arrays.sort(num);
//此时前面有k个0 (视为已删除的量) 因此本组中位数的序号为为 [(n - 1)+ k]对2取整
mid[i] = num[(n+k-1)/2];
}
//输出即可
for (int i = 0; i < t; i++) {
System.out.print(mid[i] + " ");
}
}
}