当前位置: 首页 > 面试经验 >

【秋招笔试】8.10京东秋招第一场-三语言题解

优质
小牛编辑
60浏览
2024-08-10

【秋招笔试】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

数据范围

题解

这道题目要求我们模拟虚拟探索者的移动过程。关键在于正确处理方向的变化和坐标的更新。

我们可以用一个二维向量 来表示当前的方向:

  • 北方:
  • 东方:
  • 南方:
  • 西方:

对于每个指令,我们需要进行以下操作:

  1. 'W':根据当前方向更新坐标
  2. 'A':将方向向左旋转90度
  3. 'D':将方向向右旋转90度
  4. '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.卢小姐的配对游戏

问题描述

卢小姐是一家婚恋公司的老板。她手上有一份长度为 的会员列表,每个会员都有一个特定的魅力值。现在,她想要将这些会员两两配对,使得每对会员的魅力值之和恰好等于 。卢小姐想知道她能组成多少种不同的会员配对。

输入格式

第一行给出两个整数 ,用空格分隔。 表示会员列表的长度, 表示目标配对魅力值之和。

 类似资料: