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

रंगीन टोपी वाली बिल्लियों के कथन की सत्यता जाँचने का C++ प्रोग्राम


मान लीजिए A सरणी में N तत्व हैं। N बिल्लियाँ हैं जो 1 से N तक संख्याबद्ध हैं। प्रत्येक बिल्ली एक टोपी पहने हुए है और i-वीं बिल्ली कहती है "मेरे अलावा अन्य N-1 बिल्लियों की टोपियों में ठीक A[i] अलग-अलग रंग हैं"। हमें जाँचना है कि क्या टोपियों के रंगों का कोई अनुक्रम मौजूद है जो बिल्लियों के कथन के अनुरूप हो।

उदाहरण के लिए, यदि इनपुट है A = [1, 2, 2], तो आउटपुट True होगा, क्योंकि यदि बिल्ली 1, 2, 3 क्रमशः लाल, नीला, नीला टोपी पहनें, तो यह कथन के अनुरूप है।

चरण

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

mn := अनंत, mx = 0, cnt = 0
n := A का आकार
आकार n+1 का सरणी a परिभाषित करें
i := 1 से n तक:
    a[i] := A[i-1]
    mn := min(mn, a[i])
    mx := max(mx, a[i])
i := 1 से n तक:
    यदि a[i] == mn, तो cnt बढ़ाएँ
यदि mx == mn, तो:
    यदि mn == n-1 या 2*mn <= n, तो true लौटाएँ
    अन्यथा false लौटाएँ
अन्यथा यदि mx == mn + 1, तो:
    यदि mn >= cnt और n - cnt >= 2*(mx - cnt), तो true लौटाएँ
    अन्यथा false लौटाएँ
अन्यथा false लौटाएँ

उदाहरण

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

#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A) {    int mn = 99999, mx = 0, cnt = 0;    int n = A.size();    vector<int> a(n + 1);    for (int i = 1; i <= n; ++i) {       a[i] = A[i - 1];       mn = min(mn, a[i]), mx = max(mx, a[i]);    }    for (int i = 1; i <= n; ++i)       if (a[i] == mn)          ++cnt;    if (mx == mn) {       if (mn == n - 1 || 2 * mn <= n)          return true;       else          return false;    }    else if (mx == mn + 1) {       if (mn >= cnt && n - cnt >= 2 * (mx - cnt))          return true;       else          return false;    }    else       return false; } int main() { vector<int> A = { 1, 2, 2 }; cout << solve(A) << endl; }

इनपुट

{ 1, 2, 2 }

आउटपुट

1
  1. C++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं C++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं

    एक बाइनरी ट्री ऊंचाई-संतुलित (height-balanced) होता है यदि प्रत्येक नोड के लिए उसके बाएं और दाएं सबट्री की ऊंचाई का निरपेक्ष अंतर 0 या 1 हो। दिए गए ट्री के लिए आउटपुट true (1) है। समाधान दृष्टिकोण (पोस्ट-ऑर्डर DFS) एक ग्लोबल फ्लैग ret = true रखें। dfs(node) फंक्शन नोड की ऊंचाई वापस करता है: यदि न

  1. C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं C++ में STL का उपयोग करके जांचें कि क्या सरणी पैलिंड्रोम है या नहीं

    n पूर्णांकों की एक सरणी arr[n] दी गई है, कार्य यह जांचना है कि क्या सरणी एक पैलिंड्रोम है या नहीं। हमें C++ में STL (स्टैंडर्ड टेम्पलेट लाइब्रेरी) का उपयोग करके यह कार्य करना है। C++ में STL (Standard Template Library) की एक विशेषता है, यह C++ टेम्पलेट कक्षाओं का एक समूह है जिसका उपयोग डेटा संरचना

  1. C++ में जांचें कि क्या तीन बिंदु संरेखीय हैं या नहीं C++ में जांचें कि क्या तीन बिंदु संरेखीय हैं या नहीं

    तीन अलग-अलग मान वाले बिंदु दिए गए हैं और कार्य यह जांचना है कि क्या बिंदु संरेखीय हैं या नहीं। बिंदुओं को संरेखीय कहा जाता है यदि वे एक ही रेखा पर स्थित हैं और वे असंरेखीय हैं यदि वे अलग-अलग रेखाओं पर हैं। नीचे संरेखीय और असंरेखीय बिंदुओं का चित्र दिया गया है। इनपुट x1 = 1, x2 = 2, x3 = 3, y1 =