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

सी ++ में दो और बाद की शक्तियां


इस समस्या में, हमें N पूर्णांकों की एक सरणी दी गई है। हमारा काम उन अनुक्रमों की गिनती ज्ञात करना है जो इस तरह बन सकते हैं कि यदि उनके तत्वों को गुणा किया जाए, तो वे एक संख्या में परिणामित होते हैं जो दो की शक्ति है।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट - गिरफ्तारी =[2, 5, 4]

आउटपुट -3

स्पष्टीकरण - परवर्ती [2], [4] और [2, 4] वांछित परिणाम देते हैं।

इस समस्या को हल करने के लिए हमें सत्ता के तर्क को समझना होगा।

वांछित परिणाम देने के लिए केवल वे संख्याएँ जिनके पास 2 की घात है, गुणा करेंगे। इसलिए, हमें सरणी से केवल उन बाद के अनुक्रमों पर विचार करना होगा जो स्वयं 2 की कुछ शक्तियां हैं।

इसलिए, यदि सरणी में M तत्व हैं जो 2 की घात हैं, तो उप-सरणियों की संख्या 2 M होगी - 1

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम

#include <iostream>
#include <math.h>
using namespace std;
bool isPowerTwo(int num) {
   if (num == 0)
      return false;
   if (num == 1)
      return true;
   if (num & (num - 1))
      return false;
   return true;
}
int SubsequenceWithPowerTwo(int arr[], int N) {
   int count = 0;
   for (int i = 0; i < N; i++)
      if (isPowerTwo(arr[i]))
         count++;
   return (int)(pow(2, count)) - 1;
}
int main() {
   int arr[] = {5, 4, 8, 12, 32, 9 };
   int N = sizeof(arr)/sizeof(arr[0]);
   cout<<"No. of subsequences which multiply to a number which is a power of 2 are : ";
   cout<<SubsequenceWithPowerTwo(arr, N)<<endl;
   return 0;
}

आउटपुट

No. of subsequences which multiply to a number which is a power of 2 are : 7

  1. C++ . में दीवारें और गेट

    मान लीजिए कि हमारे पास एक m x n 2D ग्रिड है, और यह इन तीन संभावित मानों के साथ आरंभ किया गया है। -1 दीवार या बाधा के लिए। 0 गेट के लिए। INF यह अनंत का अर्थ है एक खाली कमरा। यहाँ 2^31 - 1 =2147483647 INF है क्योंकि हम मान सकते हैं कि एक गेट की दूरी 2147483647 से कम है। प्रत्येक खाली कमरे

  1. C++ में वृत्त और आयत ओवरलैपिंग

    मान लीजिए कि हमारे पास एक वृत्त है जिसे (त्रिज्या, xc, yc) के रूप में दर्शाया गया है, यहाँ (xc, yc) वृत्त का केंद्र निर्देशांक है। हमारे पास एक अक्ष-संरेखित आयत भी है जिसे (x1, y1, x2, y2) के रूप में दर्शाया गया है, जहाँ (x1, y1) निचले-बाएँ कोने के निर्देशांक हैं, और (x2, y2) शीर्ष-दाएँ के निर्देशां

  1. डोमिनोज़ और ट्रोमिनो टाइलिंग सी++ . में

    मान लीजिए कि हमारे पास दो प्रकार की आकृतियाँ हैं, डोमिनोज़ और ट्रोमिनो। उन्हें नीचे की तरह घुमाया जा सकता है - एक टाइलिंग में, प्रत्येक वर्ग को एक टाइल से ढंकना चाहिए। यहां दो टाइलिंग अलग-अलग हैं यदि और केवल तभी जब बोर्ड पर दो 4-प्रत्यक्ष रूप से आसन्न कोशिकाएं हों, जैसे कि टाइलिंग में से एक में द