Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Robot กลับสู่ Origin ใน C++


สมมติว่ามีหุ่นยนต์และตำแหน่งเริ่มต้นคือ (0, 0) ถ้าเรามีลำดับการเคลื่อนที่ของมัน เราต้องตรวจสอบว่าหุ่นยนต์ตัวนี้จบลงที่ (0, 0) หลังจากที่มันเคลื่อนที่เสร็จหรือไม่

ลำดับการย้ายจะได้รับเป็นสตริง และอักขระย้าย[i]แสดงถึงการย้าย ith ของมัน สัญลักษณ์คือ R สำหรับขวา L สำหรับซ้าย U สำหรับขึ้นและ D สำหรับลง หากหุ่นยนต์กลับไปยังจุดเริ่มต้นหลังจากเสร็จสิ้นการเคลื่อนไหวทั้งหมด ให้คืนค่า จริง มิฉะนั้น คืนค่าเท็จ

ดังนั้น หากอินพุตเป็นเหมือน "RRULLD" เอาต์พุตจะเป็นจริง สองหน่วยทางขวา จากนั้นขึ้น จากนั้นจึงปล่อยสองหน่วยแล้วลงอีกครั้ง ดังนั้นนี่คือตำแหน่งเริ่มต้น

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • l :=ขนาดของอาร์เรย์ย้าย

  • ถ้า l เท่ากับ 0 แล้ว −

    • คืนความจริง

  • lft :=0, ขึ้น :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ถ้า move[i] เหมือนกับ 'L' แล้ว −

      • (เพิ่มขึ้น lft 1)

    • ถ้าย้าย[i] เหมือนกับ 'R' แล้ว −

      • (ลดลงทีละ 1)

    • ถ้า move[i] เหมือนกับ 'U' แล้ว −

      • (เพิ่มขึ้น 1)

    • ถ้า move[i] เหมือนกับ 'D' แล้ว −

      • (ลดลง 1)

  • ถ้า lft เท่ากับ 0 และสูงกว่าเท่ากับ 0 ดังนั้น −

    • คืนความจริง

  • คืนค่าเท็จ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#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"));
}

อินพุต

"RRULLD"

ผลลัพธ์

1