9.19 中兴笔试面经 - 编程题 & 题解
考试平台: 海纳在线考试
考试时间:2023-09-19 (两小时)
投递岗位: 软件开发
考试题型: 单选题10题(每题3分)+ 多选题5题(每题6分)+ 编程题2题(每题20分)
P1
您是一名越野路线规划师,负责规划从A到B的越野旅行路线。您得到了一份A到B之间的地形图数据,上面列出了两地的各景点的海拔高度(景点大小可以根据不同比例尺来决定)。您需要根据这份地形图数据来寻找一条相对平缓的旅行路线,基本原则是:找出起伏最小的一条路线,在这条路线上的景点之间的落差尽可能小。假设某条路径上的景点高度分别为: 100,200,205,300,280,您需要计算出相邻景点之间的落差,分别为100 (200-100) 、5 (205-200)、95 (300-205)、-20 (280-300)。 不幸的是,您的同事不小心将各路径上各景点海拔高度的数据丢失了,手里只有各景点间的落差数据。您的同事想通过瞎编一些数据来蒙混过关,但您知道这种方法是不可取的。为了更好、更直观地向您的同事展示可能的组合,您决定写一个程序,通过落差数据和当地的最高和最低海拔数据,直接显示可能的组合数以打消他企图蒙混过关的念头。
输入描述
第一行输入某条路径上一系列落差数,数字之间以逗号分隔 第二行输入当地的最低海拔 第三行输入当地的最高海拔
输出描述
输出根据落差数系列和最高、最低海拔数计算得到的可能的高度组合数 (只需要输出有几种组合,不需要输出具体的组合情况)
样例1
输入:
10,5,9,-2
1
100
输出:
76
样例2
输入:
100,5,95,-20
50
400
输出:
151
题解
题目要求的其实就是,找到给定路径的最高点和最低点之间的最大落差,然后根据区域的最高最低海拔来计算出有多少种组合。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String line1 = in.nextLine();
String[] split = line1.split(",");
int n = split.length;
int[] arr = new int[n];
for (int i = 0; i < n; i++) arr[i] = Integer.parseInt(split[i]);
// 该区域最低,最高
int low = in.nextInt(), hight = in.nextInt();
// min, max 表示选择的该路径中高于和低于 a[0] 的最大落差
int min = 0, max = 0, sum = 0;
for (int h : arr) {
sum += h;
min = Math.min(min, sum);
max = Math.max(max, sum);
}
// 表示选择的这条路径中,最高点和最低点之间的落差
int h = max - min;
System.out.println(hight - low - h + 1);
}
}
P2
在遥远的宇宙中,星际旅行是家常便饭。在每一个星际码头,都有一个特殊的星际时钟,用来指示星际航班的起飞时间。这个星际时钟并不是我们习惯的十进制时间显示,而是用二进制来显示时间。 星际时钟有两排LED灯,第一排四个LED灯表示小时,第二排6个LED灯表示分钟。例如; 1 0 0 1 1 1 1 0 1 1 这表示9:59分,第一排四位分别为1、0、0、1的二进制值转换为十进制数字分别为:8、0、0、1,它们的和为9;第二排六位分别为1、1、1、0、1、1,转换成十进制数字分别为32、16、8、0、2、1,它们的和为59,因此如果时钟上的
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
📕分享大厂机试真题深度剖析核心考点,助你速通面试。