1 条题解
-
0
方法思路
这是一个模拟题,我们需要跟踪牛牛的位置和朝向,根据字符串中的指令更新状态。
- 初始位置:(0, 0)
- 初始朝向:北方(0, 1)
- 指令解析:
- W:向当前朝向前进一步
- A:将朝向向左旋转90度(逆时针)
- D:将朝向向右旋转90度(顺时针)
- S:原地不动
- 使用方向向量表示朝向,便于旋转操作:
- 北方(0, 1)
- 西方(-1, 0)
- 南方(0, -1)
- 东方(1, 0)
代码实现
Java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { // 使用BufferedReader代替Scanner提高输入效率 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); br.close(); int[] position = finalPosition(s); System.out.println(position[0] + " " + position[1]); } public static int[] finalPosition(String s) { // 初始位置 int x = 0, y = 0; // 使用常量数组代替二维数组,减少内存访问 // 方向向量:北(0,1), 西(-1,0), 南(0,-1), 东(1,0) int[] dx = {0, -1, 0, 1}; int[] dy = {1, 0, -1, 0}; int directionIdx = 0; // 初始朝向北方 // 直接遍历字符串而不是转换为字符数组 int len = s.length(); for (int i = 0; i < len; i++) { char c = s.charAt(i); if (c == 'W') { // 向前走一步 x += dx[directionIdx]; y += dy[directionIdx]; } else if (c == 'A') { // 左转90度 directionIdx = (directionIdx + 1) % 4; } else if (c == 'D') { // 右转90度 directionIdx = (directionIdx + 3) % 4; // 等同于-1+4,但避免了减法 } // 若为'S'则不移动 } return new int[]{x, y}; } }
Python
def final_position(s): # 初始位置 x, y = 0, 0 # 方向向量:北(0,1), 西(-1,0), 南(0,-1), 东(1,0) directions = [(0, 1), (-1, 0), (0, -1), (1, 0)] direction_idx = 0 # 初始朝向北方 for char in s: if char == 'W': # 向前走一步 dx, dy = directions[direction_idx] x += dx y += dy elif char == 'A': # 左转90度 direction_idx = (direction_idx + 1) % 4 elif char == 'D': # 右转90度 direction_idx = (direction_idx - 1) % 4 # 若为'S'则不移动 return x, y s = input().strip() x, y = final_position(s) print(f"{x} {y}")
C++
#include <iostream> #include <string> #include <vector> using namespace std; vector<int> finalPosition(const string& s) { // 初始位置 int x = 0, y = 0; // 方向向量:北(0,1), 西(-1,0), 南(0,-1), 东(1,0) vector<vector<int>> directions = {{0, 1}, {-1, 0}, {0, -1}, {1, 0}}; int directionIdx = 0; // 初始朝向北方 for (char c : s) { if (c == 'W') { // 向前走一步 int dx = directions[directionIdx][0]; int dy = directions[directionIdx][1]; x += dx; y += dy; } else if (c == 'A') { // 左转90度 directionIdx = (directionIdx + 1) % 4; } else if (c == 'D') { // 右转90度 directionIdx = (directionIdx - 1 + 4) % 4; // 加4确保结果为正 } // 若为'S'则不移动 } return {x, y}; } int main() { string s; cin >> s; vector<int> position = finalPosition(s); cout << position[0] << " " << position[1] << endl; return 0; }
- 1
信息
- ID
- 61
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者