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

Robot quay trở lại nguồn gốc trong C ++


Giả sử có một rô bốt và vị trí bắt đầu của nó là (0, 0). Nếu chúng ta có một chuỗi các chuyển động của nó, chúng ta phải kiểm tra xem liệu robot này có kết thúc ở (0, 0) sau khi nó hoàn thành các bước di chuyển của mình hay không.

Chuỗi di chuyển được cho dưới dạng một chuỗi và ký tự di chuyển [i] đại diện cho bước di chuyển thứ i của nó. Các ký hiệu là R cho phải, L cho trái, U cho lên và D cho xuống. Nếu rô bốt quay trở lại điểm ban đầu sau khi hoàn thành tất cả các bước di chuyển của mình, hãy trả về true. Nếu không, trả về false.

Vì vậy, nếu đầu vào giống như "RRULLD", thì đầu ra sẽ là true, Bên phải hai đơn vị, sau đó đi lên, sau đó sang trái hai đơn vị rồi lại xuống, vì vậy đây là vị trí bắt đầu.

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

  • l:=kích thước của mảng di chuyển

  • nếu l giống 0, thì -

    • trả về true

  • lft:=0, up:=0

  • để khởi tạo i:=0, khi i

    • nếu di chuyển [i] giống với 'L', thì -

      • (tăng lft lên 1)

    • nếu di chuyển [i] giống với 'R', thì -

      • (giảm lft đi 1)

    • nếu di chuyển [i] giống với 'U', thì -

      • (tăng lên 1)

    • nếu di chuyển [i] giống với 'D', thì -

      • (giảm lên 1)

  • nếu lft bằng 0 và lên bằng 0, thì -

    • trả về true

  • trả về false

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;
class Solution {
public:
   bool judgeCircle(string moves) {
      int l = moves.length();
      if (l == 0) {
         return true;
      }
      int lft = 0, up = 0;
      for (int i = 0; i < l; i++) {
         if (moves[i] == 'L') {
            lft++;
         }
         if (moves[i] == 'R') {
            lft--;
         }
         if (moves[i] == 'U') {
            up++;
         }
         if (moves[i] == 'D') {
            up--;
         }
      }
      if (lft == 0 && up == 0) {
         return true;
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.judgeCircle("RRULLD"));
}

Đầu vào

"RRULLD"

Đầu ra

1