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

C++ प्रोग्राम: दिए गए बिंदु को कवर करने वाला सर्वोत्तम फिट आयत ज्ञात करना


इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए बिंदु को कवर करने वाला सर्वोत्तम फिट आयत ज्ञात करता है।

इस समस्या में, हमें एक बिंदु के निर्देशांक (x,y) और लंबाई/चौड़ाई का अनुपात = l/b (मान लीजिए) दिया जाता है। हमें एक आयत के निर्देशांक ज्ञात करने हैं जिसमें दिया गया बिंदु हो और जिनके आयाम दिए गए अनुपात का पालन करते हों। कई आयत मौजूद होने की स्थिति में, हमें वह चुनना होगा जिसके यूक्लिड केंद्र और दिए गए बिंदु के बीच की दूरी सबसे कम हो।

इसे हल करने के लिए, पहले हम अनुपात l/b को न्यूनतम करेंगे। उसके बाद, हम (n,m) क्षेत्र (अनुमत 2D स्थान) में रहने के लिए min(n/l, m/b) मान ज्ञात करेंगे। पहले, मान लीजिए कि (x,y) हमारे आयत का केंद्र है। यदि नहीं, तो हम लंबाई और चौड़ाई के मानों को एक साथ घटाकर और जोड़कर मूल निर्देशांक ज्ञात करेंगे।

उदाहरण

#include <cmath>
#include <iostream>
using namespace std;

// दिए गए अनुपात के मान को न्यूनतम करने के लिए
int greatest_div(int l, int b) {
    if (l == 0)
        return b;
    else
        return greatest_div(b % l, l);
}

// निर्देशांक की गणना करने के लिए
void calc_coordinates(int n, int m, int x, int y, int l, int b) {
    int k, div1;
    int x1, y1, x2, y2;
    div1 = greatest_div(l, b);
    l /= div1;
    b /= div1;
    k = min(n / l, m / b);
    // वह रेंज ज्ञात करना जिसमें दिया गया बिंदु मौजूद है
    x1 = x - (k * l - k * l / 2);
    x2 = x + k * l / 2;
    y1 = y - (k * b - k * b / 2);
    y2 = y + k * b / 2;
    // यदि निर्देशांक रेंज से बाहर चले जाते हैं
    if (x1 < 0) {
        x2 -= x1;
        x1 = 0;
    }
    if (x2 > n) {
        x1 -= x2 - n;
        x2 = n;
    }
    if (y1 < 0) {
        y2 -= y1;
        y1 = 0;
    }
    if (y2 > m) {
        y1 -= y2 - m;
        y2 = m;
    }
    cout << "Coordinates : " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
}

int main() {
    int n = 50, m = 20, x = 10, y = 6, l = 4, b = 7;
    calc_coordinates(n, m, x, y, l, b);
    return 0;
}

आउटपुट

Coordinates : 6 0 14 14

  1. - C++ कोड: प्रतिबंधों को पूरा करने वाला बिंदु खोजें

    मान लीजिए, हमें दो बिंदु a = (x1, y1) और b = (x2, y2) दिए गए हैं। दो बिंदुओं के बीच मैनहट्टन दूरी dist(a, b) = |x1 - x2| + |y1 - y2| है। यदि बिंदु a का निर्देशांक (0, 0) है और बिंदु b का निर्देशांक (x, y) है, तो हमें एक बिंदु c ढूंढना है जैसे कि dist(a, c) = dist(a, b)/2 और dist(b, c) = dist(a, b)/2

  1. - दिए गए पूर्णांकों से अधिकतम संभावित टैली ज्ञात करने का C++ प्रोग्राम

    मान लीजिए हमें दो पूर्णांक n और m दिए गए हैं और k टपल्स हैं जिनमें चार पूर्णांक {ai, bi, ci, di} हैं। चार सरणियाँ a, b, c, d दी गई हैं जहाँ a[i] i-वें टपल का a मान दर्शाता है। अब एक अनुक्रम dp पर विचार करें जिसमें n धनात्मक पूर्णांक हों और 1 ≤ dp[1] < dp[2] < ... < dp[n] ≤ m। हम एक मेट्रिक टैली परि

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1