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

C++ में एक रेखा पर अधिकतम बिंदु


मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -

C++ में एक रेखा पर अधिकतम बिंदु

तो 4 बिंदु हैं

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

  • n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएं

  • ans := 2

  • i को 1 से n - 1 तक की रेंज में

    • count := 0

    • इंडेक्स i और i - 1 से दो बिंदु लें, ये p1, p2 हैं

    • यदि p1 और p2 बिंदु समान हैं, तो

      • j को 0 से n - 1 तक की रेंज में

        • यदि points[j].x = p1.x और points[j].y = p1.y, तो count को 1 से बढ़ाएं

    • अन्यथा -

      • j को 0 से n - 1 तक की रेंज में

        • p3 := इंडेक्स j से बिंदु

        • यदि p3.y - p2.y * p2.x - p1.x = p2.y - p1.y * p3.x - p2.x, तो count को 1 से बढ़ाएं

    • ans := ans और count का अधिकतम

  • ans लौटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution {    public:    int maxPoints(vector<vector<int>>& points) {       int n = points.size();       if(n<3)return n;       int ans = 2;       for(int i = 1;i<n;i++){          int count = 0;          lli x1 = points[i-1][0];          lli x2 = points[i][0];          lli y1 = points[i-1][1];          lli y2 = points[i][1];          if(x1 == x2 && y1 == y2){             for(int j =0;j<n;j++){                if(points[j][0] ==x1 && points[j][1] == y1)count++;             }          } else {             for(int j =0;j<n;j++){                int x3 = points[j][0];                int y3 = points[j][1];                if((y3-y2)*(x2-x1) == (y2-y1)*(x3-x2))count++ ;             }          }          ans = max(ans, count);       }       return ans;    } }; main(){    Solution ob;    vector<vector<int>> v = {{1,1},{3,2},{5,3},{4,1},{2,3},{1,4}};    cout << (ob.maxPoints(v)); }

इनपुट

[{1,1},{3,2},{5,3},{4,1},{2,3},{1,5}]

आउटपुट

4

  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

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

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

    समस्या विवरण एक वृत्त (केंद्र h,k और त्रिज्या r) और रेखा (ax+by+c=0) दी गई है। जांचें कि रेखा वृत्त को स्पर्श करती है, प्रतिच्छेद करती है, या बाहर है। विधि केंद्र से रेखा की लंबवत दूरी P निकालें: P = |ah + bk + c| / √(a²+b²) P की त्रिज्या r से तुलना करें: r → बाहर P = r → स्पर्श करती है

  1. - C++ में static_cast

    static_cast का उपयोग सामान्य/साधारण प्रकार रूपांतरण के लिए किया जाता है। यह निहित प्रकार जबरदस्ती (implicit type coercion) के लिए भी जिम्मेदार कास्ट है और इसे स्पष्ट रूप से भी बुलाया जा सकता है। आपको इसका उपयोग फ्लोट को इंट में, चार को इंट में आदि जैसे मामलों में करना चाहिए। यह संबंधित प्रकार के क्