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

C++ में किसी सरणी को हटाने के लिए आवश्यक न्यूनतम संचालन

विवरण

N . की एक सरणी को देखते हुए पूर्णांक जहाँ N एक सम संख्या है। सरणी पर दो प्रकार के संचालन की अनुमति है।

  • सरणी के किसी भी तत्व का मान 1 से बढ़ाएँ।
  • यदि सरणी में दो आसन्न तत्व लगातार अभाज्य संख्या हैं, तो दोनों तत्वों को हटा दें।

कार्य सरणी के सभी तत्वों को हटाने के लिए आवश्यक न्यूनतम संख्या में संचालन का पता लगाना है।

उदाहरण

यदि सरणी {10, 13} है तो न्यूनतम 2 संचालन आवश्यक हैं

  • इन्क्रीमेंट 1 सेंट एक सरणी का तत्व 1. तो नया सरणी बन जाता है {11, 13}
  • हटाएं 1 सेंट और 2 nd तत्व, क्योंकि दोनों क्रमागत अभाज्य संख्याएँ हैं

एल्गोरिदम

1. To remove numbers, we must transform two numbers to two consecutive primes.
2. Let us suppose a and b are the consecutive prime numbers then we use sieve of Eratosthenes to precompute prime numbers and then find the first prime p not greater than a and the first greater than p using array
3. Once this computation is done use dynamic programming to solve the problem

उदाहरण

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int minimumPrefixReversals(int *a, int n) {
   string start = "";
   string destination = "", t, r;
   for (int i = 0; i < n; i++) {
      start += to_string(a[i]);
   }
   sort(a, a + n);
   for (int i = 0; i < n; i++) {
      destination += to_string(a[i]);
   }
   queue<pair<string, int> > qu;
   pair<string, int> p;
   qu.push(make_pair(start, 0));
   if (start == destination) {
      return 0;
   }
   while (!qu.empty()) {
      p = qu.front();
      t = p.first;
      qu.pop();
      for (int j = 2; j <= n; j++) {
         r = t;
         reverse(r.begin(), r.begin() + j);
         if (r == destination) {
            return p.second + 1;
         }
         qu.push(make_pair(r, p.second + 1));
      }
   }
}
int main() {
   int a[] = { 1, 2, 4, 3 };
   int n = sizeof(a) / sizeof(a[0]);
   cout << "Minimum reversal: " <<
   minimumPrefixReversals(a, n) << endl;
   return 0;
}

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

आउटपुट

Minimum reversal: 3

  1. C++ में सरणी के GCD को k का गुणज बनाने के लिए न्यूनतम संचालन

    मान लीजिए कि हमारे पास एक सरणी गिरफ्तारी और दूसरा मान k है। हमें सरणी के GCD को k के गुणज के बराबर बनाने के लिए न्यूनतम संख्या में संक्रियाओं का पता लगाना होगा। इस मामले में, ऑपरेशन मूल्य में वृद्धि या कमी कर रहा है। मान लीजिए कि सरणी {4, 5, 6} की तरह है, और k 5 है। हम 4 को 1 से बढ़ा सकते हैं और 6 क

  1. C++ में को-प्राइम ऐरे बनाने के लिए न्यूनतम इंसर्शन

    इस खंड में हम एक और दिलचस्प समस्या देखेंगे। मान लीजिए कि हमारे पास एन तत्वों की एक सरणी है। इस सरणी को सह-अभाज्य सरणी बनाने के लिए हमें न्यूनतम संख्या में प्रतिच्छेदन बिंदु खोजने होंगे। को-प्राइम एरे में हर दो लगातार एलीमेंट का gcd 1 होता है। हमें ऐरे को भी प्रिंट करना होता है। मान लीजिए हमारे पास

  1. सी ++ में सरणी के सभी तत्वों को समान बनाने के लिए न्यूनतम डिलीट ऑपरेशंस।

    समस्या कथन n तत्वों की एक सरणी को देखते हुए जैसे कि तत्व दोहरा सकते हैं। हम सरणी से किसी भी संख्या में तत्वों को हटा सकते हैं। कार्य इसे समान बनाने के लिए सरणी से हटाए जाने वाले तत्वों की न्यूनतम संख्या को खोजना है। arr[] = {10, 8, 10, 7, 10, -1, -4, 12} सभी सरणी तत्वों को समान बनाने के लिए हमें ह