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

C++ . में रेखा परावर्तन

मान लीजिए कि हमारे पास 2D तल पर n बिंदु हैं, हमें यह जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से दर्शाती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो दी गई रेखा पर सभी बिंदुओं को प्रतिबिंबित करने के बाद मूल बिंदुओं का सेट वही होता है जो प्रतिबिंबित होता है।

इसलिए, यदि इनपुट पॉइंट्स की तरह है =[[1,1],[-1,1]]

C++ . में रेखा परावर्तन

तब आउटपुट सही होगा

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

  • एक सेट को ठीक परिभाषित करें

  • n :=बिंदुओं का आकार

  • minVal :=inf

  • मैक्सवैल :=-इन्फ

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • minVal :=न्यूनतम minVal और अंक[i, 0]

    • maxVal :=अधिकतम अधिकतम वैल और अंक[i, 0]

    • पॉइंट्स [i] को ओके में डालें

  • मध्य:=मैक्सवैल + मिनवैल

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • एक्स:=अंक [i, 0]

    • y:=अंक[i, 1]

    • x :=मध्य - x

    • अगर { x, y } ठीक नहीं है, तो -

      • झूठी वापसी

  • सही लौटें

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool isReflected(vector<vector<int<>& points) {
      set<vector<int< > ok;
      int n = points.size();
      int minVal = INT_MAX;
      int maxVal = INT_MIN;
      for (int i = 0; i < n; i++) {
         minVal = min(minVal, points[i][0]);
         maxVal = max(maxVal, points[i][0]);
         ok.insert(points[i]);
      }
      int mid = maxVal + minVal;
      for (int i = 0; i < n; i++) {
         int x = points[i][0];
         int y = points[i][1];
         x = mid - x;
         if (!ok.count({ x, y }))
            return false;
      }
      return true;
   }
};
main(){
   Solution ob;
   vector<vector<int<> v = {{1,1},{-1,1}};
   cout << (ob.isReflected(v));
}

इनपुट

{{1,1},{-1,1}}

आउटपुट

1

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा

  1. C++ . में मिरर रिफ्लेक्शन

    मान लीजिए कि चार दीवारों में से प्रत्येक पर दर्पणों के साथ एक विशेष वर्गाकार कमरा है। दक्षिण-पश्चिम कोने को छोड़कर प्रत्येक कोने में रिसेप्टर्स होते हैं। इन्हें 0, 1, और 2 के रूप में गिना जाता है। अब वर्गाकार कमरे में लंबाई p की दीवारें हैं, और दक्षिण-पश्चिम कोने से एक लेज़र किरण पहले 0 वें रिसेप्टर

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

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