中兴
中兴¶
单选题:2+3+2 应该是 多选题:2+3 编程题:2道
第一题:选择排序¶
题目描述¶
简单选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
现在需要得到序列第 i 趟排序后的结果(本题中采用每轮选取选出最小值的方式)。比如给定趟数 3 和序列 (45 88 48 40 21 73) 。根据选择排序的算法: 第一趟:21 88 48 40 45 73
第二趟:21 40 48 88 45 73
第三趟:21 40 45 88 48 73
由此可以得到第三趟的输出为 (21 40 45 88 48 73)。
输入描述:¶
输入包含多组,每组由两行组成:
第一行为正整数i,代表需要做的简单排序的趟数;
第二行为正整数序列,包含用空格隔开的多个值(i<=序列长度,序列长度最大为100)。 输出描述:
输出描述:¶
输出经过第i趟排序后的正整数序列(用空格分隔元素)。
代码实现¶
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextLine()) {
// 读取第一个输入:趟数 i
String line1 = scanner.nextLine();
if (line1 == null || line1.trim().isEmpty()) {
break;
}
int passes = Integer.parseInt(line1.trim());
// 读取第二个输入:待排序的序列
if (!scanner.hasNextLine()) {
break;
}
String line2 = scanner.nextLine();
if (line2 == null || line2.trim().isEmpty()) {
break;
}
String[] tokens = line2.trim().split("\\s+");
int[] arr = new int[tokens.length];
for (int i = 0; i < tokens.length; i++) {
arr[i] = Integer.parseInt(tokens[i]);
}
// 对序列进行选择排序的前 passes 趟
int n = arr.length;
for (int i = 0; i < passes && i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换当前元素和最小元素
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
// 输出第 i 趟排序后的序列
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if (i != arr.length - 1) {
System.out.print(" ");
}
}
System.out.println();
}
scanner.close();
}
}
第二题:二叉树¶
题目描述¶
由数字 1~N 顺序构成的完全二叉树中,其中 1 是根结点。
求从根结点到指定数字对应结点的路径上的数字组成的数字字符串。
输入描述:¶
整数N,1 <= N <= 1000
输出描述:¶
从根结点到输入数字的路径结点上的数字组成的数字字符串,数字之间由单个空格间隔。
示例: 输入:5 输出:1 2 5
代码¶
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入的整数 N
int N = scanner.nextInt();
scanner.close();
// 用于存储路径上的节点
ArrayList<Integer> path = new ArrayList<>();
int current = N;
// 构建从目标节点到根节点的路径
while (current >= 1) {
path.add(current);
current /= 2;
}
// 逆序输出路径(从根节点到目标节点)
Collections.reverse(path);
for (int i = 0; i < path.size(); i++) {
System.out.print(path.get(i));
if (i != path.size() - 1) {
System.out.print(" ");
}
}
}
}