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

k संख्याएँ ज्ञात कीजिए जो 2 की घात हैं और C++ में योग N है


मान लीजिए कि हमारे पास दो नंबर N और K हैं। काम K नंबरों को प्रिंट करना है, जो 2 की घात है और उनका योग N है। यदि यह संभव नहीं है, तो -1 को वापस करें। . मान लीजिए एन =9 और के =4, तो आउटपुट 4 2 2 1 होगा, जिसका योग 9 है, और तत्वों की संख्या 4 है, और उनमें से प्रत्येक 2 की शक्ति है।

इस समस्या को हल करने के लिए हमें इन चरणों का पालन करना होगा -

  • यदि k, N में सेट बिट्स की संख्या से कम है या संख्या N से अधिक है, तो -1 पर लौटें

  • सेट बिट्स पर दो की शक्तियों को प्राथमिकता कतार में जोड़ें

  • जब तक हम K तत्व प्राप्त नहीं कर लेते, तब तक प्राथमिकता कतार शुरू करें, फिर तत्व को प्राथमिकता कतार से हटा दें

  • हटाए गए तत्व/2 को दो बार फिर से प्राथमिकता कतार में डालें

  • यदि k तत्व प्राप्त होते हैं, तो उन्हें प्रिंट करें।

उदाहरण

#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
void displayKnumbers(int n, int k) {
   int set_bit_count = __builtin_popcount(n);
   if (k < set_bit_count || k > n) {
      cout << "-1";
      return;
   }
   priority_queue<int> queue;
   int two = 1;
   while (n) {
      if (n & 1) {
         queue.push(two);
      }
      two = two * 2;
      n = n >> 1;
   }
   while (queue.size() < k) {
      int element = queue.top();
      queue.pop();
      queue.push(element / 2);
      queue.push(element / 2);
   }
   int ind = 0;
   while (ind < k) {
      cout << queue.top() << " ";
      queue.pop();
      ind++;
   }
}
int main() {
   int n = 30, k = 5;
   cout << "Numbers are: ";
   displayKnumbers(n, k);
}

आउटपुट

Numbers are: 8 8 8 4 2

  1. सी ++ प्रोग्राम दो संख्याओं को योग और उत्पाद दोनों के साथ खोजने के लिए एन के समान है

    इस ट्यूटोरियल में, हम दो संख्याओं (जैसे ए और बी) को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे, जैसे कि दोनों a+b = N and a*b = N are satisfied. दोनों समीकरणों में से a को हटाने पर हमें b और N में द्विघात समीकरण मिलता है, यानी b2 - bN + N = 0 इस समीकरण के दो मूल होंगे जो हमें a और b दोनों का मान दे

  1. सी++ प्रोग्राम एन नंबरों के जीसीडी और एलसीएम को खोजने के लिए

    यह n संख्याओं का GCD और LCM ज्ञात करने का कोड है। GCD या दो या अधिक पूर्णांकों का सबसे बड़ा सामान्य भाजक, जो सभी शून्य नहीं हैं, सबसे बड़ा धनात्मक पूर्णांक है जो प्रत्येक पूर्णांक को विभाजित करता है। जीसीडी को ग्रेटेस्ट कॉमन फैक्टर के रूप में भी जाना जाता है। दो संख्याओं का लघुत्तम समापवर्तक (LCM)

  1. सी ++ प्रोग्राम रिकर्सन का उपयोग करके प्राकृतिक संख्याओं का योग खोजने के लिए

    प्राकृत संख्याएं 1 से शुरू होने वाली धनात्मक पूर्णांक होती हैं। प्राकृत संख्याओं का क्रम है - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10…… रिकर्सन का उपयोग करके पहले n प्राकृतिक संख्याओं का योग ज्ञात करने का कार्यक्रम इस प्रकार है। उदाहरण #include <iostream> using namespace std; int sum(int