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

C++ में समान योग और XOR (Equal Sum and XOR)


इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा कार्य i = 0 से n तक के उन पूर्णांकों की संख्या गिनने के लिए एक प्रोग्राम बनाना है जहां योग XOR के बराबर हो यानी (n+i) = (n^i)।

उदाहरण से समझते हैं:

इनपुट: n = 4

आउटपुट: 4

व्याख्या:

i = 0 से n तक के सभी मानों पर विचार करते हुए,

i = 0, 4 + 0 = 4, 4^0 = 4
i = 1, 4 + 1 = 5, 4^1 = 5
i = 2, 4 + 2 = 6, 4^2 = 6
i = 3, 4 + 3 = 7, 4^3 = 7
i = 4, 4 + 4 = 8, 4^4 = 0
गिनती = 4

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

एक सरल समाधान n और i के योग और n और i के XOR के मान ढूंढना है। दोनों मानों की तुलना करें और फिर उन मानों की गिनती करें जिनके लिए वे बराबर हैं।

एल्गोरिदम:

चरण 1: i = 0 से n तक सभी मानों के लिए लूप चलाएं।

चरण 1.1: (n + i) का मान निकालें।

चरण 1.2: (n^i) का मान निकालें।

चरण 1.3: चरण 1.1 और 1.2 में पाए गए मानों की तुलना करें।
चरण 1.4: यदि वे बराबर हैं, तो गिनती बढ़ाएं।

चरण 2: गिनती मान प्रिंट करें।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:

उदाहरण

#include <iostream> 
using namespace std; 

int main() { 
    int n = 5; 
    int counter = 0; 
    for(int i = 0; i <= n; i++) 
        if ((n + i) == (n ^ i)) 
            counter++; 
    cout << "The count of integers with equal sum and XOR is " << counter; 
    return 0; 
}

आउटपुट:

The count of integers with equal sum and XOR is 2

यह विधि अच्छी है लेकिन समस्या का एक बेहतर समाधान हो सकता है, जो इस तथ्य का उपयोग करता है कि

यदि n^i = n+i, तो n&i = 0।

यदि n&i का मान 0 है, तो इसके लिए हमें दोनों संख्याओं के विपरीत सेट और अनसेट बिट्स की आवश्यकता होती है। और हमें ऐसे मानों की गिनती करने की आवश्यकता है। यहां इसका प्रोग्राम है:

उदाहरण (अनुकूलित संस्करण)

#include <iostream> 
using namespace std; 

int countValuesWithEqualSumXOR(int n) { 
    int countUnsetBits = 0; 
    while (n) { 
        if ((n & 1) == 0) 
            countUnsetBits++; 
        n = n >> 1; 
    } 
    return 1 << countUnsetBits; 
} 

int main() { 
    int n = 6; 
    cout << "The count of integers with equal sum and XOR is " << countValuesWithEqualSumXOR(n); 
    return 0; 
}

आउटपुट:

The count of integers with equal sum and XOR is 2

  1. - C++ में Partition to K Equal Sum Subsets

    मान लीजिए हमारे पास nums नामक एक पूर्णांक सरणी और एक धनात्मक पूर्णांक k है, जांचें कि क्या इस सरणी को k गैर-खाली उपसमुच्चयों (subsets) में विभाजित करना संभव है जिनके योग सभी समान हैं। इसलिए यदि सरणी [4,3,2,3,5,2,1] जैसी है और k = 4, तो परिणाम True होगा, क्योंकि दी गई सरणी को चार उपसरणियों जैसे [[5],

  1. - C++ में Partition Equal Subset Sum

    मान लीजिए हमारे पास केवल धनात्मक संख्याओं वाली एक गैर-खाली सरणी है, हमें यह ढूंढना है कि क्या सरणी को दो उपसमुच्चयों (subsets) में विभाजित किया जा सकता है जैसे कि दोनों उपसमुच्चयों में तत्वों का योग समान हो। इसलिए यदि इनपुट [1,5,11,5] जैसा है, तो आउटपुट true होगा। क्योंकि इस सरणी को [1, 5, 5] और [11

  1. - C++ में N से छोटी या बराबर न्यूनतम संख्याएं जिनका योग S हो

    समस्या कथन1 से N तक N संख्याएं और एक संख्या S दी गई है। कार्य उन न्यूनतम संख्याओं को प्रिंट करना है जिनका योग S देता हैउदाहरणयदि n = 7 और s = 10 तो न्यूनतम 2 संख्याएं आवश्यक हैं(9, 1) (8, 2) (7, 3) (6, 4)एल्गोरिदमउत्तर की गणना नीचे दिए गए सूत्र का उपयोग करके की जा सकती है (S/N) + 1 यदि { S %N > 0