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

ค้นหาทิศทางจากสตริงที่กำหนดใน C++


สมมติว่าเรามีสตริงที่มีเพียง L และ R ซึ่งหมายถึงการหมุนซ้ายและการหมุนขวาตามลำดับ เราต้องหาทิศทางสุดท้ายของเดือย นี่คือทิศทางเหนือ (N) ตะวันออก (E) ใต้ (S) และตะวันตก (W) เรากำลังสมมติว่าเดือยชี้ไปทางทิศเหนือ (N) ในเข็มทิศ

ดังนั้น หากอินพุตเป็นเหมือน "RRLRLLR" เอาต์พุตจะเป็น E เนื่องจากทิศทางเริ่มต้นคือ N, RR จะชี้ไปที่ S จากนั้น LR จะชี้ไปที่ N เดิมอีกครั้ง จากนั้น LL จะชี้ไปที่ตำแหน่งก่อนหน้า N แล้ว R จะชี้ไปที่ E ดังนั้น E จึงเป็นที่สิ้นสุด

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

  • นับ :=0

  • ทิศทาง :=สตริงว่าง

  • สำหรับการเริ่มต้น i :=0, เมื่อ i − ความยาวของ s, อัปเดต (เพิ่ม i ขึ้น 1), ทำ −

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

      • (ลดจำนวนลง 1)

    • มิฉะนั้น

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

  • ถ้านับ> 0 แล้ว −

    • หากการนับ mod 4 เหมือนกับ 0 ดังนั้น −

      • ทิศทาง :="N"

    • มิฉะนั้นเมื่อการนับ mod 4 เหมือนกับ 1 ดังนั้น −

      • ทิศทาง :="E"

    • มิฉะนั้นเมื่อการนับ mod 4 เหมือนกับ 2 ดังนั้น −

      • ทิศทาง :="ส"

    • มิฉะนั้นเมื่อการนับ mod 4 เหมือนกับ 3 ดังนั้น −

      • ทิศทาง :="W"

  • ถ้านับ <0 แล้ว −

    • หากการนับ mod 4 เหมือนกับ 0 ดังนั้น −

      • ทิศทาง :="N"

    • มิฉะนั้นเมื่อการนับ mod 4 เหมือนกับ -1 ดังนั้น −

      • ทิศทาง :="W"

    • มิฉะนั้นเมื่อการนับ mod 4 เหมือนกับ -2 ดังนั้น −

      • ทิศทาง :="ส"

    • ในทางกลับกันเมื่อการนับ mod 4 เหมือนกับ -3 แล้ว −

      • ทิศทาง :="E"

  • ทิศทางกลับ

ตัวอย่าง

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

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

อินพุต

"RRLRLLR"

ผลลัพธ์

E