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

C++ में विजेता द्वारा खेले गए अधिकतम खेल


समस्या कथन

N खिलाड़ी हैं जो एक टूर्नामेंट खेल रहे हैं। हमें विजेता द्वारा खेले जा सकने वाले अधिकतम खेलों की संख्या ढूंढनी है। इस टूर्नामेंट में, दो खिलाड़ियों को एक-दूसरे के खिलाफ खेलने की अनुमति केवल तभी है जब उनके द्वारा खेले गए खेलों का अंतर एक से अधिक न हो।

उदाहरण

यदि 3 खिलाड़ी हैं तो विजेता तय करने के लिए 2 खेलों की आवश्यकता होती है -

खेल - 1: खिलाड़ी 1 बनाम खिलाड़ी 2

खेल - 2: खिलाड़ी 2 बनाम खेल - 1 का विजेता

एल्गोरिदम

  • हम इस समस्या को हल कर सकते हैं पहले यह गणना करके कि विजेता द्वारा x खेल खेलने के लिए न्यूनतम कितने खिलाड़ियों की आवश्यकता है। एक बार इसकी गणना हो जाने पर वास्तविक समस्या इसका व्युत्क्रम है। अब मान लें कि dp[i] न्यूनतम खिलाड़ियों की संख्या दर्शाता है ताकि विजेता i खेल खेले
  • हम dp मानों के बीच एक पुनरावर्ती संबंध लिख सकते हैं: dp[i + 1] = dp[i] + dp[i - 1] क्योंकि यदि उपविजेता ने (i - 1) खेल खेले हैं और विजेता ने i खेल खेले हैं और वे सभी खिलाड़ी जिनके खिलाफ उन्होंने मैच खेला है वे असंयुक्त हैं, तो विजेता द्वारा खेले गए कुल खेल उन दो सेट के खिलाड़ियों का योग होंगे।
  • उपरोक्त पुनरावर्ती संबंध को इस प्रकार लिखा जा सकता है: dp[i] = dp[i - 1] + dp[i - 2] जो फाइबोनैचि श्रृंखला के समान संबंध है, इसलिए हमारा अंतिम उत्तर उस अधिकतम फाइबोनैचि संख्या का इंडेक्स होगा जो इनपुट में दिए गए खिलाड़ियों की संख्या से कम या बराबर है

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

int getMaxGamesToDecideWinner(int n) {
    int dp[n];
    dp[0] = 1;
    dp[1] = 2;
    int idx = 2;
    do {
        dp[idx] = dp[idx - 1] + dp[idx - 2];
    } while (dp[idx++] <= n);
    return (idx - 2);
}

int main() {
    int players = 3;
    cout << "Maximum games required to decide winner = " << getMaxGamesToDecideWinner(players) << endl;
    return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को कंपाइल और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है -

Maximum games required to decide winner = 2

  1. - C++ में अधिकतम अंतराल

    मान लीजिए हमारे पास एक सरणी है, जो क्रमबद्ध नहीं है। हमें इसके क्रमबद्ध रूप में क्रमिक तत्वों के बीच अधिकतम अंतर ढूंढना है। यदि सरणी में 2 से कम तत्व हैं तो हम 0 लौटाएंगे। तो यदि सरणी [12,3,9,1,17] जैसी है, तो आउटपुट 6 होगा, क्योंकि क्रमबद्ध सरणी [1,3,9,12,17] होगी तो 5 अधिकतम अंतर होगा क्योंकि 3 और

  1. - C++ में मैक्सिमम विड्थ रैम्प (Maximum Width Ramp)

    मान लीजिए हमारे पास पूर्णांकों का एक ऐरे A है, एक रैम्प (i, j) का एक टपल है जिसके लिए i < j और A[i] ≤ A[j]। ऐसे रैम्प की चौड़ाई j - i होती है। हमें A में रैम्प की अधिकतम चौड़ाई खोजनी है। यदि कोई नहीं है, तो 0 लौटाएं। उदाहरण के लिए, यदि इनपुट [6,0,8,2,1,5] है, तो आउटपुट 4 होगा। यहां अधिकतम चौड़ाई रै

  1. - C++ में चतुर्भुज का अधिकतम क्षेत्रफल

    समस्या कथन चतुर्भुज की चार भुजाएं a, b, c, d दी गई हैं, दी गई भुजाओं से बनने वाले चतुर्भुज का अधिकतम क्षेत्रफल ज्ञात करें। एल्गोरिदम हम इस समस्या को हल करने के लिए ब्रह्मगुप्त के सूत्र का उपयोग कर सकते हैं: √((s-a)(s-b)(s-c)(s-d)) उपरोक्त सूत्र में s अर्ध-परिमाप है। इसकी गणना निम्नानुसार की जाती ह