इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा कार्य i =0 से n तक पूर्णांकों की संख्या ज्ञात करने के लिए एक प्रोग्राम बनाना है, जहाँ योग XOR के बराबर है अर्थात (n+i) =(n^i)।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: एन =4
आउटपुट: 4पी>
स्पष्टीकरण:
0 से n तक के सभी मानों को ध्यान में रखते हुए,
मैं =0, 4 + 0 =4, 4^0 =4
मैं =1, 4 + 1 =5, 4^1 =5
मैं =2, 4 + 2 =6, 4^2 =6
मैं =3, 4 + 3 =7, 4^3 =7
मैं =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