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

सरणी से ऐसे अंक चुनें कि न्यूनतम दूरी C++ में अधिकतम हो

इस समस्या में, हमें n तत्वों का एक सरणी arr[] दिया गया है जो N सूचकांक स्थिति का प्रतिनिधित्व करते हैं और C चुंबक हैं। हमारा काम इन सभी चुम्बकों को इस तरह से छापना है कि दो निकटतम चुम्बकों के बीच की दूरी यथासंभव बड़ी हो।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - सरणी ={ 1, 4, 6,12, 28, 44 } C =4

आउटपुट - 11

इस समस्या को हल करने के लिए, हम अधिकतम दूरी तक बाइनरी खोज का उपयोग करेंगे। हम अधिकतम दूरी तय करेंगे और फिर सभी चुम्बकों को 0 से अधिकतम दूरी के बीच रखना मान्य है।

फिर हम मध्य मूल्यों को खोजने के लिए एक द्विआधारी खोज लागू करेंगे और जांचेंगे कि क्या मैग्नेट रखना संभव है। यदि हां, तो चुंबक लगाएं और मध्य को अधिकतम दूरी मानें और उसी प्रक्रिया का पालन करें।

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम,

#include <iostream>
using namespace std;
bool canPlace(int arr[], int n, int C, int mid){
   int magnet = 1, currPosition = arr[0];
   for (int i = 1; i < n; i++) {
      if (arr[i] - currPosition >= mid) {
         magnet++;
         currPosition = arr[i];
         if (magnet == C)
            return true;
      }
   }
   return false;
}
int minDistMax(int n, int C, int arr[]){
   int lo, hi, mid, ans;
   lo = 0;
   hi = arr[n - 1];
   ans = 0;
   while (lo <= hi) {
      mid = (lo + hi) / 2;
      if (!canPlace(arr, n, C, mid))
         hi = mid - 1;
      else {
         ans = max(ans, mid);
         lo = mid + 1;
      }
   }
   return ans;
}
int main(){
   int C = 4;
   int arr[] = { 1, 4, 6,12, 28, 44 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximised Minimum distance is "<<minDistMax(n, C, arr);
   return 0;
}

आउटपुट

Maximised Minimum distance is 11

  1. जोड़ा जाने वाला न्यूनतम मान ज्ञात करें ताकि सरणी C++ में संतुलित हो जाए

    मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। और n सम है। हमें उस मान को खोजना होगा जो सरणी को संतुलित करने के लिए आवश्यक है। चूंकि सरणी का आकार सम है, तो हम दो भाग बना सकते हैं। बाएँ आधे का योग और दाएँ आधे का योग संतुलित होना चाहिए। तो अगर सरणी ए =[1, 2, 3, 2, 5, 3] की तरह है तो बाएं आधे का

  1. एक सरणी में जोड़े की संख्या पाएं जैसे कि उनका एक्सओआर 0 सी ++ का उपयोग कर रहा है।

    मान लीजिए हमारे पास n तत्वों की एक सरणी है; हमें सरणी में ऐसे कई जोड़े खोजने हैं जिनका XOR 0 होगा। युग्म (x, y) जिसका XOR 0 है, तो x =y है। इसे हल करने के लिए हम सरणी को सॉर्ट कर सकते हैं, फिर यदि दो लगातार तत्व समान हैं, तो गिनती बढ़ाएं। यदि सभी तत्व समान हैं, तो अंतिम गणना नहीं की जा सकती है। उस स

  1. किसी सरणी में न्यूनतम संख्या जोड़ें ताकि योग C++ में भी हो जाए?

    मान लीजिए कि कुछ संख्याओं के साथ एक सरणी है। हमें कम से कम यह बताना होगा कि तत्वों के योग को सम बनाने के लिए इसमें कितनी संख्याएँ जोड़ी जाएँगी। संख्या 0 से अधिक होनी चाहिए। इसलिए यदि तत्वों का योग विषम है, तो हम 1 जोड़ देंगे, लेकिन यदि योग पहले से ही सम है, तो हम इसे सम बनाने के लिए इसमें 2 जोड़ दें