Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm hướng từ chuỗi đã cho trong C ++

Giả sử chúng ta có một chuỗi chỉ chứa L và R, điều này biểu thị sự quay trái và quay phải tương ứng, chúng ta phải tìm hướng cuối cùng của trục. Ở đây các hướng là bắc (N), đông (E), nam (S) và tây (W). Chúng tôi đang giả định rằng trục quay được hướng về phía bắc (N) trong la bàn.

Vì vậy, nếu đầu vào giống như "RRLRLLR", thì đầu ra sẽ là E, vì hướng ban đầu là N, RR sẽ trỏ đến S, sau đó LR sẽ trỏ đến cùng N một lần nữa, sau đó LL sẽ trỏ đến vị trí trước đó N, sau đó R sẽ chỉ đến E. Vì vậy, E là điểm cuối cùng.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • đếm:=0

  • hướng:=một chuỗi trống

  • để khởi tạo i:=0, khi i - độ dài của s, cập nhật (tăng i lên 1), thực hiện -

    • nếu s [i] giống với 'L' thì -

      • (giảm số lượng đi 1)

    • Nếu không

      • (tăng số lượng lên 1)

  • nếu đếm> 0, thì -

    • nếu số lượng mod 4 giống 0, thì -

      • hướng:="N"

    • ngược lại, khi số lượng mod 4 giống với 1, thì -

      • hướng:="E"

    • ngược lại, khi số lượng mod 4 giống như 2, thì -

      • hướng:="S"

    • ngược lại, khi số lượng mod 4 giống với 3, thì -

      • hướng:="W"

  • nếu đếm <0, thì -

    • nếu số lượng mod 4 giống 0, thì -

      • hướng:="N"

    • ngược lại khi số lượng mod 4 giống như -1, thì -

      • hướng:="W"

    • ngược lại khi số lượng mod 4 giống như -2, thì -

      • hướng:="S"

    • theo chiều kim khi đếm mod 4 giống như -3, thì -

      • hướng:="E"

  • quay trở lại hướng

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include<bits/stdc++.h>
using namespace std;
string get_dir(string s) {
   int count = 0;
   string direction = "";
   for (int i = 0; i < s.length(); i++){
      if (s[0] == '\n')
         return NULL;
      if (s[i] == 'L')
         count--;
      else
         count++;
   }
   if (count > 0){
      if (count % 4 == 0)
         direction = "N";
      else if (count % 4 == 1)
         direction = "E";
      else if (count % 4 == 2)
         direction = "S";
      else if (count % 4 == 3)
         direction = "W";
   }
   if (count < 0){
      if (count % 4 == 0)
         direction = "N";
      else if (count % 4 == -1)
         direction = "W";
      else if (count % 4 == -2)
         direction = "S";
      else if (count % 4 == -3)
         direction = "E";
   }
   return direction;
}
int main() {
   string s = "RRLRLLR";
   cout << (get_dir(s));
}

Đầu vào

"RRLRLLR"

Đầu ra

E