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

C++ में बाइनरी सरणी के उपसरणी के दशमलव मान के लिए क्वेरीज़


समस्या विवरण

इस समस्या में, हमें एक बाइनरी सरणी bin[] और Q क्वेरीज़ दी गई हैं जिनमें से प्रत्येक में दो मान L और R होते हैं। हमारा कार्य C++ में बाइनरी सरणी के उपसरणी के दशमलव मान के लिए क्वेरीज़ को हल करने के लिए एक प्रोग्राम बनाना है।

यहां प्रत्येक क्वेरी को हल करने के लिए, हमें L से R से शुरू होने वाले उपसरणी द्वारा बनाई गई दशमलव संख्या को ढूंढना और प्रिंट करना होगा यानी उपसरणी[L...R]।

उदाहरण

इनपुट

bin[] = {1, 1, 0, 0, 1, 0, 1, 0, 0, 0}
Q = 2
2 5
0 6

आउटपुट

2 101

व्याख्या

क्वेरी 1 के लिए, बना उपसरणी { 0, 0, 1, 0} है। यह बाइनरी संख्या 0010 बनाएगा जिसका दशमलव रूपांतरण 2 है।

क्वेरी 2 के लिए, बना उपसरणी { 1, 1, 0, 0, 1, 0, 1} है। यह बाइनरी संख्या 1100101 बनाएगा जिसका दशमलव रूपांतरण 101 है।

समाधान दृष्टिकोण

एक सरल समाधान इंडेक्स L से इंडेक्स R तक बाइनरी स्ट्रिंग को पार करके, बनी बाइनरी संख्या को ढूंढकर, और फिर दी गई बाइनरी संख्या को उसके दशमलव समकक्ष में बदलकर है।

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

#include <iostream>
#include <math.h>
using namespace std;

int CalcDecimalValue(int bin[], int L, int R) {
    int decimal = 0;
    int j = 0;
    for(int i = R; i >= L; i--){
        decimal += bin[i] * pow(2, j);
        j++;
    }
    return decimal;
}

int main() {
    int bin[] = {1, 1, 0, 0, 1, 0, 1, 0, 0, 0};
    int n = sizeof(bin) / sizeof(bin[0]);
    int Q = 2;
    int query[Q][2] = {{2, 5},{0, 6}};
    for(int i = 0; i < Q; i++){
        cout << "क्वेरी " << (i+1) << ": उपसरणी का दशमलव मान " << CalcDecimalValue(bin, query[i][0], query[i][1]) << "\n";
    }
    return 0;
}

आउटपुट

क्वेरी 1: उपसरणी का दशमलव मान 2
क्वेरी 2: उपसरणी का दशमलव मान 101

दूसरा दृष्टिकोण समस्या को हल करने के लिए पूर्व-गणना सरणी का उपयोग करना है। हम एक पूर्व-गणना सरणी बनाएंगे जो (n-i)वें इंडेक्स मान तक बनी दशमलव संख्या को संग्रहीत करेगी। और क्वेरीज़ को हल करने के लिए, हम l और r पर मान का अंतर ढूंढेंगे।

सरणी का iवां मान बाइनरी से दशमलव रूपांतरण सूत्र का उपयोग करके पाया जाएगा। इसे दाईं ओर से लागू करते हुए, यानी n-1 से,

decimalArray[i] = bin[i]*2^(n-1-i) + bin[i+1]*2^(n-1-i+1) + ... bin[n- 1]*2^(0)

कार्यक्रम उदाहरण (पूर्व-गणना दृष्टिकोण)

#include <bits/stdc++.h>
using namespace std;

int decimalArray[1000];

void createDecimalArray(int bin[], int n){
    memset(decimalArray, 0, n*sizeof(int));
    decimalArray[n - 1] = bin[n - 1] * pow(2, 0);
    for (int i = n - 2; i >= 0; i--)
        decimalArray[i] = decimalArray[i + 1] + bin[i] * (pow(2,(n - 1 - i)));
}

int CalcDecimalValue(int L, int R, int n){
    if (R != n - 1)
        return (decimalArray[L] - decimalArray[R + 1]) / (pow(2, (n - 1 - R)));
    return decimalArray[L] / (1 << (n - 1 - R));
}

int main(){
    int bin[] = {1, 1, 0, 0, 1, 0, 1, 0, 0, 0};
    int n = sizeof(bin) / sizeof(bin[0]);
    createDecimalArray(bin, n);
    int Q = 2;
    int query[Q][2] = {{2, 5},{0, 6}};
    for(int i = 0; i < Q; i++){
        cout << "क्वेरी " << (i+1) << ": उपसरणी का दशमलव मान " << CalcDecimalValue(query[i][0], query[i][1], n) << "\n";
    }
    return 0;
}

आउटपुट

क्वेरी 1: उपसरणी का दशमलव मान 2
क्वेरी 2: उपसरणी का दशमलव मान 101
  1. C++ में ऑक्टल से डेसिमल रूपांतरण C++ में ऑक्टल से डेसिमल रूपांतरण

    एक ऑक्टल संख्या इनपुट के रूप में दी गई है, कार्य दी गई ऑक्टल संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में डेसिमल संख्याओं को आधार 10 के साथ दर्शाया जाता है और ऑक्टल संख्या को आधार 8 के साथ दर्शाया जाता है जो अंक 0 से 7 तक होती है जबकि डेसिमल संख्याएं 0-9 से शुरू होने वाला कोई भी संख्यात्मक अंक

  1. C++ में डेसिमल से बाइनरी रूपांतरण C++ में डेसिमल से बाइनरी रूपांतरण

    एक डेसिमल संख्या इनपुट के रूप में दी गई है, कार्य दी गई डेसिमल संख्या को बाइनरी संख्या में बदलना है। कंप्यूटर में डेसिमल संख्या को आधार 10 के साथ दर्शाया जाता है और बाइनरी संख्या को आधार 2 के साथ दर्शाया जाता है क्योंकि इसमें केवल दो बाइनरी अंक 0 और 1 होते हैं जबकि डेसिमल संख्याएं 0-9 से शुरू होने व

  1. C++ में बाइनरी से डेसिमल रूपांतरण C++ में बाइनरी से डेसिमल रूपांतरण

    एक बाइनरी संख्या इनपुट के रूप में दी गई है, कार्य दी गई बाइनरी संख्या को डेसिमल संख्या में बदलना है। कंप्यूटर में डेसिमल संख्या को आधार 10 के साथ दर्शाया जाता है और बाइनरी संख्या को आधार 2 के साथ दर्शाया जाता है क्योंकि इसमें केवल दो बाइनरी अंक 0 और 1 होते हैं जबकि डेसिमल संख्याएं 0-9 से शुरू होने व