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

बिटवाइज़ और C++ में K के निकटतम उप-सरणी का

इस समस्या में, हमें n आकार का एक सरणी arr[] और एक पूर्णांक k दिया जाता है। हमारा काम इंडेक्स i से j तक सबएरे को खोजना और बिटवाइज और उसके सभी तत्वों की गणना करना है। इसके बाद एब्स का न्यूनतम मान प्रिंट करें (K- (बिटवाइज और सबरे का))।

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

इनपुट - एआर [] ={5, 1}, के =2

आउटपुट -

समस्या को हल करने के लिए, कुछ तरीके हो सकते हैं।

एक सरल उपाय प्रत्यक्ष विधि का उपयोग करना होगा। बिटवाइज़ ढूंढकर और सभी उप-सरणी के लिए फिर |K-X|.

चरण 1 - बिटवाइज और सभी उप-सरणी के लिए खोजें।

चरण 2 - उपरोक्त चरण 1 से प्राप्त प्रत्येक मान के लिए (मान लीजिए X)। |k - X|. का मान ज्ञात कीजिए।

चरण 3 - ऊपर पाए गए न्यूनतम मान को न्यूनतम चर में संग्रहीत करें।

चरण 4 - अंत में, न्यूनतम प्रिंट करें।

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,

#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
   int minimum = 1000;
   for (int i = 0; i < n; i++) {
      int X = arr[i];
      for (int j = i; j < n; j++) {
         X &= arr[j];
         minimum = min(minimum, abs(k - X));
      }
   }
   return minimum;
}
int main() {
   int arr[] = { 1, 6 , 4, 9, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
   return 0;
}

आउटपुट

Minimum value difference between Bitwise AND of sub-array and K is 1

एक अन्य समाधान उप-सरणी में अवलोकन और संचालन का उपयोग कर सकता है। बिटवाइज़ AND में एक विशेषता है कि यह कभी नहीं बढ़ेगा। इसलिए, हमें न्यूनतम अंतर पर नजर रखनी होगी जो कि X ≤ K.

. होने पर बढ़ जाएगा

उदाहरण

#include <iostream>
using namespace std;
int CalcBitwiseANDClosestK(int arr[], int n, int k){
   int minimum = 1000000;
   for (int i = 0; i < n; i++) {
      int BitwiseAND = arr[i];
      for (int j = i; j < n; j++) {
         BitwiseAND &= arr[j];
         minimum = min(minimum, abs(k - BitwiseAND));
         if (BitwiseAND <= k)
            break;
      }
   }
   return minimum;
}
int main() {
   int arr[] = {1, 6 , 4, 9, 7 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout<<"Minimum value difference between Bitwise AND of sub-array and K is "<<CalcBitwiseANDClosestK(arr, n, k);
   return 0;
}

आउटपुट

Minimum value difference between Bitwise AND of sub-array and K is 1

  1. C++ में वृत्त और आयत ओवरलैपिंग

    मान लीजिए कि हमारे पास एक वृत्त है जिसे (त्रिज्या, xc, yc) के रूप में दर्शाया गया है, यहाँ (xc, yc) वृत्त का केंद्र निर्देशांक है। हमारे पास एक अक्ष-संरेखित आयत भी है जिसे (x1, y1, x2, y2) के रूप में दर्शाया गया है, जहाँ (x1, y1) निचले-बाएँ कोने के निर्देशांक हैं, और (x2, y2) शीर्ष-दाएँ के निर्देशां

  1. डोमिनोज़ और ट्रोमिनो टाइलिंग सी++ . में

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

  1. सी ++ और सी # में फ़ोरैच

    C++ में Foreach C++ 11 ने प्रत्येक तत्व को पार करने के लिए फ़ोरैच लूप पेश किया। यहाँ एक उदाहरण है - उदाहरण #include <iostream> using namespace std; int main() {    int myArr[] = { 99, 15, 67 };    // foreach loop    for (int ele : myArr)    cout <&