Cho chuỗi ký tự chỉ chứa 'N', 'S', 'E', 'W' đại diện cho di chuyển Bắc, Nam, Đông, Tây từ gốc tọa độ (0, 0). Kiểm tra sau khi thực hiện hết chuỗi có quay lại (0, 0) hay không.
Ví dụ
Đầu vào: "EENWWS"
Đầu ra: True
Giải thích: Đông(2) -> Bắc(1) -> Tây(2) -> Nam(1). Tọa độ cuối: (0, 0).
Phương pháp giải
Duyệt chuỗi, cập nhật tọa độ (x, y):
- E (East): x++
- W (West): x--
- N (North): y++
- S (South): y--
x == 0 && y == 0.
Chương trình C++
#include <bits/stdc++.h>
using namespace std;
bool isBackToOrigin(string moves) {
int x = 0, y = 0;
for (char c : moves) {
switch(c) {
case 'E': x++; break;
case 'W': x--; break;
case 'N': y++; break;
case 'S': y--; break;
}
}
return (x == 0 && y == 0);
}
int main() {
string moves = "EENWWS";
cout << "Chuoi: " << moves << " -> "
<< (isBackToOrigin(moves) ? "Quay lai goc (True)" : "Khong quay lai (False)");
return 0;
}
Đầu ra
Chuoi: EENWWS -> Quay lai goc (True)
Mở rộng: Nếu cần đếm số bước tối thiểu để quay lại gốc từ vị trí hiện tại: abs(x) + abs(y) (Manhattan distance).