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

सी ++ में समान योग और एक्सओआर

इस समस्या में, हमें एक पूर्णांक 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

  1. C++ में K समान सम सबसेट का विभाजन

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

  1. C++ में विभाजन समान उपसमुच्चय योग

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

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

    समस्या कथन 1 से N और एक संख्या S से N नंबर दिए गए हैं। कार्य S को देने के लिए योग की न्यूनतम संख्या को प्रिंट करना है उदाहरण यदि n =7 और s =10 तो न्यूनतम 2 संख्याएँ आवश्यक हैं (9, 1) (8, 2) (7, 3) (6, 4) एल्गोरिदम Answer can be calculated using below formula (S/N) + 1 if { S %N > 0} उदाहरण #inc