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

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


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

उदाहरण

इनपुट - arr[] = {5, 1}, k = 2

आउटपुट -

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

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

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

चरण 2 - उपरोक्त चरण 1 से पाए गए प्रत्येक मान के लिए (मान लें X)। |k - X| का मान ढूंढें।

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

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

कार्यक्रम उदाहरण (सरल दृष्टिकोण)

#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 << "उपसरणी के बिटवाइज AND और K के बीच न्यूनतम मान अंतर " << CalcBitwiseANDClosestK(arr, n, k);
    return 0;
}

आउटपुट

उपसरणी के बिटवाइज AND और K के बीच न्यूनतम मान अंतर 1

एक अन्य समाधान उप-सरणी में AND ऑपरेशन का अवलोकन करके हो सकता है। बिटवाइज 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 << "उपसरणी के बिटवाइज AND और K के बीच न्यूनतम मान अंतर " << CalcBitwiseANDClosestK(arr, n, k);
    return 0;
}

आउटपुट

उपसरणी के बिटवाइज AND और K के बीच न्यूनतम मान अंतर 1
  1. C++ में वृत्त और आयत के ओवरलैप की जांच C++ में वृत्त और आयत के ओवरलैप की जांच

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

  1. C++ में डोमिनो और ट्रोमिनो टाइलिंग C++ में डोमिनो और ट्रोमिनो टाइलिंग

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

  1. - C++ और C# में Foreach लूप

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