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

सबसे छोटी संख्या n खोजें जैसे कि n XOR n+1 दिए गए k के बराबर हो C++ में

मान लीजिए हमारे पास एक धनात्मक संख्या k है। हमें धनात्मक संख्या n खोजनी है, जैसे कि n और n+1 का XOR k के समान हो। तो यदि k = 7 (111), आउटपुट 3 होगा। क्योंकि 3 (011), और 3 + 1 = 4 (100), तो 011 XOR 100 = 111 (7)

दो संभावित मामले हैं। मान लीजिए n सम है। n का अंतिम बिट = 0। फिर n + 1 का अंतिम बिट = 1। बाकी बिट्स समान हैं। तो XOR 1 होगा, जब n विषम है, अंतिम बिट 1, और n + 1 का अंतिम बिट 0 है। लेकिन इस मामले में, कैरी के कारण अधिक बिट्स भिन्न होते हैं। कैरी तब तक बाएं की ओर प्रसारित होती है जब तक हमें बाएं से n में पहला 0 बिट नहीं मिल जाता। तो n XOR n + 1, 2^i - 1 होगा, जहां i n में बाएं से पहले 0 बिट की स्थिति है। तो हम कह सकते हैं कि यदि k 2^i - 1 के रूप में है, तो उत्तर k/2 होगा।

उदाहरण

#include <iostream>
using namespace std;

int findNValue(int k) {
    if (k == 1)
        return 2;
    if (((k + 1) & k) == 0)
        return k / 2;
    return -1;
}

int main() {
    int k = 15;
    cout << "The value of n is: " << findNValue(k);
}

आउटपुट

The value of n is: 7

  1. - C++ का उपयोग करके एक संख्या x खोजें जिसके अंकों का योग x के बराबर दिए गए n के बराबर हो

    यहां हम एक समस्या देखेंगे, जहां हम एक संख्या n लेते हैं, हमें एक अन्य मान x ढूंढना है, जैसे कि x + x के अंकों का योग दी गई संख्या n के बराबर हो। मान लीजिए n का मान 21 है। यह प्रोग्राम x = 15 लौटाएगा, क्योंकि 15 + 15 के अंकों का योग (1+5) = 21 = n होता है। इसे हल करने के लिए, हमें सरल दृष्टिकोण अपना

  1. - C++ में दी गई संख्या n के लिए x ढूंढें जहां x + अंकों का योग = n

    समस्या विवरण एक संख्या n दी गई है, हमें एक मान x ढूंढना है जिससे x + x के अंकों का योग = n हो। उदाहरण के लिए, n = 21 के लिए, x = 15 होगा क्योंकि 15 + (1+5) = 21। हल दृष्टिकोण सरल दृष्टिकोण: 1 से n तक पुनरावृति करें, प्रत्येक संख्या के लिए जांचें कि क्या संख्या + उसके अंकों का योग = n है। यदि हां,

  1. - C++ में दी गई रेंज में विशिष्ट जोड़ी (x, y) ढूंढें जहां x, y को विभाजित करता है

    समस्या विवरण एक रेंज [l, r] दी गई है, हमें एक जोड़ी (x, y) ढूंढनी है जहां l ≤ x, y ≤ r और x, y को विभाजित करता है। यदि कई जोड़ियां हैं तो कोई भी एक वापस करें। हल दृष्टिकोण यह समस्या O(1) समय में हल हो सकती है। सबसे छोटा अनुपात y/x = 2 होता है। इसलिए x = l और y = 2l लेने से हमेशा एक वैध जोड़ी मिलती