Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

रोबोट सर्किल सी++ में बंधा हुआ है

मान लीजिए कि हमारे पास एक अनंत विमान है, एक रोबोट शुरू में स्थिति (0, 0) पर खड़ा है और उत्तर की ओर उन्मुख है। रोबोट तीन निर्देशों में से एक प्राप्त कर सकता है -

  • जी - सीधे 1 इकाई जाओ;

  • एल - 90 डिग्री बाईं ओर मुड़ें;

  • आर - 90 डिग्री दाहिनी ओर मुड़ें।

रोबोट दिए गए निर्देशों को क्रम से करता है, निर्देश हमेशा के लिए दोहराए जाते हैं। हमें यह जांचना है कि क्या विमान में एक वृत्त मौजूद है जैसे कि रोबोट कभी भी वृत्त को नहीं छोड़ता है। तो अगर इनपुट [GGLLGG] जैसा है, तो जवाब सही होगा। (0,0) से (0,2) तक, यह हमेशा के लिए लूप हो जाएगा, इसलिए यह एक बंद पथ है, और उत्तर सत्य है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक सरणी बनाएं dir:=[[0,1], [1,0], [0,-1], [-1,0]]

  • एक जोड़ी अस्थायी बनाएं, और प्रारंभ में यह (0, 0) और k:=0

    . है
  • मेरे लिए 0 से s के आकार की सीमा में

    • अगर s[i] G है, तो

      • अस्थायी:=(दिर [के, 0], डीआईआर [के, 1])

    • अन्यथा जब s[i] L है, तब k :=(k + 1) mod 4, अन्यथा k :=(k - 1) mod 4

  • यदि असत्य है जब अस्थायी (0, 0) और k> 0 नहीं है, अन्यथा सत्य

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
class Solution {
   public:
   bool isRobotBounded(string s) {
      pair <int, int> temp({0,0});
      int k = 0;
      for(int i = 0; i < s.size(); i++){
         if(s[i] == 'G'){
            temp.first += dir[k][0];
            temp.second += dir[k][1];
         }else if(s[i] == 'L'){
            k = (k + 1) % 4;
         }else{
            k = ((k - 1) + 4) % 4;
         }
      }
      return temp.first == 0 && temp.second == 0 || k > 0;
   }
};
main(){
   Solution ob;
   cout << (ob.isRobotBounded("GGLLGG"));
}

इनपुट

"GGLLGG"

आउटपुट

1

  1. C++ . में एक वृत्त पर पूर्णतः विपरीत व्यक्ति की स्थिति

    इस समस्या में, हमें दो पूर्णांक N और M दिए गए हैं। एक वृत्त है और उस पर N लोग खड़े हैं। एम व्यक्ति की स्थिति को दर्शाता है। हमारा काम एम के विपरीत व्यक्ति की स्थिति को प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट - एन =6, एम =3 आउटपुट -6 स्पष्टीकरण - इस समस्या को हल करने के

  1. जाँच करें कि कोई रेखा C++ में वृत्त को स्पर्श करती है या प्रतिच्छेद करती है

    मान लीजिए हमारे पास एक वृत्त और दूसरी सीधी रेखा है। हमारा कार्य यह पता लगाना है कि रेखा वृत्त को स्पर्श करती है या उसे काटती है, अन्यथा वह बाहर से होकर गुजरती है। तो नीचे की तरह तीन अलग-अलग मामले हैं - यहां हम इसे निम्नलिखित चरणों द्वारा हल करेंगे। ये नीचे की तरह हैं - केंद्र के बीच लंबवत P ढूंढ

  1. C++ में एक वर्ग के एक परिचालित वृत्त का क्षेत्रफल

    इस समस्या में, जब हमें वर्ग की भुजा दी जाती है, तो हम एक वर्ग के परिबद्ध वृत्त के क्षेत्रफल की गणना करेंगे। इससे पहले कि हम आगे बढ़ें, आइए अवधारणाओं को बेहतर ढंग से समझने के लिए बुनियादी परिभाषाओं को संशोधित करें। वर्ग एक चतुर्भुज है जिसकी सभी भुजाएँ समान हैं। परिक्रमा चक्र एक वृत्त बहुभुज के सभी