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

ตรวจสอบว่าสามารถกลับสู่ตำแหน่งเริ่มต้นหลังจากเคลื่อนที่ไปในทิศทางที่กำหนดใน C++ . ได้หรือไม่


สมมติว่าเราอยู่ที่ตำแหน่ง (0, 0) เรามีสตริงที่แสดงถึงทิศทางที่ต่อเนื่องกันโดยใช้ตัวอักษรสี่ตัว เราต้องตรวจสอบว่าเราสามารถกลับมาที่ตำแหน่ง (0, 0) ได้หรือไม่หลังจากพิจารณาทิศทางที่กำหนดทั้งหมด สัญลักษณ์คือ

  • E สำหรับตะวันออก
  • W สำหรับทิศตะวันตก
  • N สำหรับทิศเหนือ
  • S สำหรับภาคใต้

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

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

  • l :=ขนาดของอาร์เรย์ย้าย
  • ถ้า l เหมือนกับ 0 แล้ว −
    • คืนค่าจริง
  • lft :=0, ขึ้น :=0
  • สำหรับการเริ่มต้น i :=0 เมื่อฉัน
  • ถ้าย้าย[i]เหมือนกับ 'W' แล้ว −
    • (เพิ่ม lft ขึ้น 1)
  • ถ้าย้าย[i]เหมือนกับ 'E' แล้ว −
    • (ลด lft ทีละ 1)
  • ถ้าย้าย[i]เหมือนกับ 'N' แล้ว −
    • (เพิ่มขึ้น 1)
  • ถ้าย้าย[i]เหมือนกับ 'S' แล้ว:
    • (ลดลง 1)
  • ถ้า lft เท่ากับ 0 และสูงกว่าเท่ากับ 0 ดังนั้น −
    • คืนค่าจริง
  • คืนค่าเท็จ
  • ตัวอย่าง (C++)

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

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       bool solve(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] == 'W') {
                   lft++;
                }
                if (moves[i] == 'E') {
                   lft--;
                }
                if (moves[i] == 'N') {
                   up++;
                }
                if (moves[i] == 'S') {
                   up--;
                }
             }
             if (lft == 0 && up == 0) {
                return true;
             }
             return false;
          }
       };
    }
    main(){
       Solution ob;
       cout << (ob.solve("EENWWS"));
    }

    อินพุต

    "EENWWS"

    ผลลัพธ์

    1