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

C++ में अधिकतम 1 स्वैप का उपयोग करते हुए निश्चित बिंदुओं की अधिकतम संख्या

समस्या कथन

0 से N-1 तक N तत्वों के क्रमपरिवर्तन को देखते हुए। एक निश्चित बिंदु एक सूचकांक है जिस पर मूल्य सूचकांक के समान होता है यानी arr[i] =i। आपको अधिकतम 1 स्वैप करने की अनुमति है। अधिकतम निश्चित अंक प्राप्त करें जो आप प्राप्त कर सकते हैं।

उदाहरण

यदि इनपुट ऐरे {0, 1, 2, 3, 4, 6, 5} है तो उत्तर 7 है।

  • स्थिर बिंदु को समायोजित करने के लिए, हमें 6 और 5 की अदला-बदली करनी होगी
  • इसके बाद पूरी सरणी स्थिर बिंदु बन जाती है और निश्चित बिंदु का अधिकतम मान 7 हो जाता है।

एल्गोरिदम

  • एक सरणी स्थिति बनाएं जो इनपुट सरणी में प्रत्येक तत्व की स्थिति को बनाए रखे
  • अब, हम सरणी को पार करते हैं और निम्नलिखित स्थितियाँ प्राप्त करते हैं -
    • यदि, a[i] =i. हम बस गिनती बढ़ा सकते हैं और आगे बढ़ सकते हैं
    • यदि, pos[i] =a[i] जिसका अर्थ है कि 2 शब्दों की अदला-बदली करने से i और a[i] निश्चित बिंदु बन जाते हैं, इसलिए गिनती 2 से बढ़ जाती है। ध्यान रखें कि स्वैप अधिकतम एक बार किया जा सकता है। ।
  • ट्रैवर्सल के अंत में, यदि हमने कोई स्वैप नहीं किया है, तो इसका मतलब है कि हमारा स्वैप 2 से गिनती बढ़ाने में सक्षम नहीं था, इसलिए अब यदि कम से कम 2 तत्व हैं जो निश्चित बिंदु नहीं हैं, तो हम कर सकते हैं गिनती को 1 से बढ़ाने के लिए एक अदला-बदली करें, यानी उन बिंदुओं में से एक को एक निश्चित बिंदु बनाएं।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int getMaximumFixedPoints(int arr[], int n) {
   int i, pos[n], count = 0, swapped = 0;
   for (i = 0; i < n; i++)
   pos[arr[i]] = i;
   for (i = 0; i < n; i++) {
      if (arr[i] == i) {
         count++;
      } else if (swapped == 0 && pos[i] == arr[i]) {
         count += 2;
         swapped = 1;
      }
   }
   if (swapped == 0 && count < n - 1) {
      count++;
   }
   return count;
}
int main() {
   int arr[] = {0, 1, 2, 3, 4, 6, 5};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum value of fixed point = " << getMaximumFixedPoints(arr, n) << endl;
   return 0;
}

आउटपुट

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

Maximum edges = 7

  1. C++ का प्रयोग करते हुए दिए गए बिंदुओं से संभव चतुर्भुजों की संख्या ज्ञात कीजिए

    एक चतुर्भुज यूक्लिडियन समतल ज्यामिति में चार शीर्षों और चार किनारों वाला एक बहुभुज बनाता है। नाम 4-गॉन आदि। चतुर्भुज के अन्य नामों में शामिल हैं और कभी-कभी उन्हें एक वर्ग, प्रदर्शन शैली आदि के रूप में भी जाना जाता है। इस लेख में, हम दिए गए बिंदुओं से संभव चतुर्भुजों की संख्या का पता लगाने के तरीकों

  1. अधिकतम संख्या जिसे C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित किया जा सकता है

    यह देखते हुए कि कार्य सात खंड प्रदर्शन की चींटी संख्या पर N खंड का उपयोग करके प्रदर्शित की जा सकने वाली अधिकतम संख्या ज्ञात करना है। आइए अब समझते हैं कि हमें एक उदाहरण का उपयोग करके क्या करना है - इनपुट -एन=5 आउटपुट - 71 स्पष्टीकरण − सबसे बड़ी संख्या सात खंडों के प्रदर्शन पर निम्नानुसार प्रदर्शि

  1. C++ का उपयोग करके XOR को अधिकतम बनाने के लिए हटाए जाने वाले तत्वों की न्यूनतम संख्या।

    समस्या कथन एक संख्या N को देखते हुए। कार्य N के बीच में हटाए जाने वाले तत्वों की न्यूनतम संख्या को खोजना है ताकि शेष तत्वों से प्राप्त XOR अधिकतम हो। एल्गोरिदम 1. If n is 1 or 2 then there is no need to remove any element. Hence answer is zero 2. Find a number which is power of 2 and greater than o