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

หุ่นยนต์กลับสู่จุดกำเนิดใน C++

ปัญหา

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

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

เช่น ถ้าผนวกเข้าเป็น "RRULLD" ผลลัพธ์จะเป็น true ขวาสองหน่วย แล้วขึ้น แล้วซ้ายสองหน่วย แล้วลงอีกครั้ง ดังนั้นจึงเป็นตำแหน่งเริ่มต้น

วิธีแก้ปัญหา

  1. l := ขนาดของอาร์เรย์ moves
  2. ถ้า l เท่ากับ 0: คืนค่า true
  3. lft := 0, up := 0
  4. for i := 0 ถึง l-1 ทำ:
    • ถ้า moves[i] เท่ากับ 'L': เพิ่ม lft ขึ้น 1
    • ถ้า moves[i] เท่ากับ 'R': ลด lft ลง 1
    • ถ้า moves[i] เท่ากับ 'U': เพิ่ม up ขึ้น 1
    • ถ้า moves[i] เท่ากับ 'D': ลด up ลง 1
  5. ถ้า lft เท่ากับ 0 และ up เท่ากับ 0: คืนค่า true
  6. คืนค่า false

ตัวอย่างโค้ด C++

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

int main(){ 
    Solution ob; 
    cout << (ob.judgeCircle("RRULLD")); 
}

อินพุต

"RRULLD"

เอาต์พุต

1