【秋招笔试】8.10京东秋招第一场-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集 40+套笔试题,
笔试真题
会在第一时间跟新🍹 近期会进行一波价格调整,没订阅的朋友抓紧冲!!!
🌰 京东春招第一场,启动!!!
💡今年题目的难度和去年比下降了好多呀
1️⃣ 第一题按照题意模拟即可。
2️⃣ 第二题是个力扣两数之和的简单版本。
3️⃣ 第三题原题的题目描述有问题,是一道贪心题
💌 01.LYA的虚拟探索
问题描述
LYA是一位热衷于虚拟现实技术的年轻工程师。她最近开发了一个虚拟探索系统,可以在二维平面上进行移动和探索。探索者初始位于坐标原点 ,面向北方(即 轴正方向)。
探索者可以执行以下四种指令:
- 'W':向当前方向前进一个单位
- 'A':向左转90度
- 'D':向右转90度
- 'S':停留在原地进行观察
LYA编写了一系列指令来控制探索者的移动。现在,她需要你的帮助来计算探索者执行完所有指令后的最终位置。
输入格式
输入只有一行,是一个由字符 'W'、'A'、'D' 和 'S' 组成的字符串 ,表示探索者需要执行的指令序列。
输出格式
输出一行,包含两个整数 和 ,用空格分隔,表示探索者的最终坐标。
样例输入
WAW
样例输出
-1 1
数据范围
题解
这道题目要求我们模拟虚拟探索者的移动过程。关键在于正确处理方向的变化和坐标的更新。
我们可以用一个二维向量 来表示当前的方向:
- 北方:
- 东方:
- 南方:
- 西方:
对于每个指令,我们需要进行以下操作:
- 'W':根据当前方向更新坐标
- 'A':将方向向左旋转90度
- 'D':将方向向右旋转90度
- 'S':不进行任何操作
左转和右转可以通过简单的坐标变换实现:
- 左转:
- 右转:
遍历完所有指令后,最终的 坐标即为答案。
时间复杂度:,其中 是指令序列的长度。 空间复杂度:,只需要常数级的额外空间。
参考代码
- Python
def virtual_explorer(instructions):
"""
模拟虚拟探索者的移动
参数:
instructions (str): 包含移动指令的字符串
返回:
tuple: 最终坐标 (x, y)
"""
x, y = 0, 0 # 初始位置
dx, dy = 0, 1 # 初始方向(北)
for cmd in instructions:
if cmd == 'W':
x += dx
y += dy
elif cmd == 'A':
dx, dy = -dy, dx # 左转90度
elif cmd == 'D':
dx, dy = dy, -dx # 右转90度
# 'S'指令不需要处理,因为探索者停留在原地
return x, y
# 读取输入
instructions = input().strip()
# 计算最终位置
final_x, final_y = virtual_explorer(instructions)
# 输出结果
print(f"{final_x} {final_y}")
- Java
import java.util.Scanner;
public class VirtualExplorer {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String instructions = scanner.nextLine().trim();
int[] result = virtualExplorer(instructions);
System.out.println(result[0] + " " + result[1]);
scanner.close();
}
/**
* 模拟虚拟探索者的移动
*
* @param instructions 包含移动指令的字符串
* @return 最终坐标 [x, y]
*/
public static int[] virtualExplorer(String instructions) {
int x = 0, y = 0; // 初始位置
int dx = 0, dy = 1; // 初始方向(北)
for (char cmd : instructions.toCharArray()) {
if (cmd == 'W') {
x += dx;
y += dy;
} else if (cmd == 'A') {
int temp = dx;
dx = -dy;
dy = temp; // 左转90度
} else if (cmd == 'D') {
int temp = dx;
dx = dy;
dy = -temp; // 右转90度
}
// 'S'指令不需要处理,因为探索者停留在原地
}
return new int[]{x, y};
}
}
- Cpp
#include <iostream>
#include <string>
using namespace std;
/**
* 模拟虚拟探索者的移动
*
* @param instructions 包含移动指令的字符串
* @param x 最终x坐标的引用
* @param y 最终y坐标的引用
*/
void virtualExplorer(const string& instructions, int& x, int& y) {
x = 0, y = 0; // 初始位置
int dx = 0, dy = 1; // 初始方向(北)
for (char cmd : instructions) {
if (cmd == 'W') {
x += dx;
y += dy;
} else if (cmd == 'A') {
int temp = dx;
dx = -dy;
dy = temp; // 左转90度
} else if (cmd == 'D') {
int temp = dx;
dx = dy;
dy = -temp; // 右转90度
}
// 'S'指令不需要处理,因为探索者停留在原地
}
}
int main() {
string instructions;
cin >> instructions;
int final_x, final_y;
virtualExplorer(instructions, final_x, final_y);
cout << final_x << " " << final_y << endl;
return 0;
}
🪔02.卢小姐的配对游戏
问题描述
卢小姐是一家婚恋公司的老板。她手上有一份长度为 的会员列表,每个会员都有一个特定的魅力值。现在,她想要将这些会员两两配对,使得每对会员的魅力值之和恰好等于 。卢小姐想知道她能组成多少种不同的会员配对。 (卢小姐为了数据对外宣传美观,加了一个条件,自己和自己也能配对)
输入格式
第一行给出两个整数 和 ,用空格分隔。 表示会员列表的长度, 表示目标
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的