हमें धनात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य उन संख्याओं की संख्या ज्ञात करना है जिन्हें अधिकतम एक बार जोड़कर दो का घात बनाया जा सकता है।
हम log2(i) का उपयोग करके जांच करेंगे कि संख्या दो की शक्ति है या इसमें 1 जोड़कर दो की शक्ति बन सकती है। यदि हाँ, तो वेतन वृद्धि की गणना करें।
आइए उदाहरणों से समझते हैं।
इनपुट - गिरफ्तारी [] ={1,3,2,5,6},
आउटपुट − संख्या की संख्या जो 2:3 की घात बन सकती है
स्पष्टीकरण − 1+1=2 → 21 , 3+1=4 → 22 , 2=21 अन्य बन जाएंगे 5+1=6, 6+1=7
इनपुट - गिरफ्तारी [] ={2,4,8,16 },
आउटपुट − संख्या की संख्या जो 2:4 की घात बन सकती है
स्पष्टीकरण − सभी 4 संख्याएं पहले से ही 2 की शक्ति हैं।
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
-
हम एक पूर्णांक सरणी लेते हैं arr[] यादृच्छिक सकारात्मक संख्याओं के साथ आरंभ किया गया।
-
फ़ंक्शन powofTwo(int arr[],int n) इनपुट के रूप में एक सरणी और उसकी लंबाई लेता है और उन संख्याओं की गिनती देता है जो दो की शक्ति हैं या बनाई जा सकती हैं।
-
प्रारंभिक गणना 0 के रूप में लें।
-
ट्रैवर्स सरणी i=0 से i
. तक -
प्रत्येक तत्व के लिए जाँच करें कि क्या फ़्लोर(log2(arr[i]))==ceil((log2(arr[i])) या फ़्लोर(log2(arr[i]+1))==ceil((log2(arr[ i]+1)) , अगर दोनों मामलों में सही वेतन वृद्धि की गणना की जाती है।
-
अंतिम परिणाम के रूप में वापसी की गणना।
उदाहरण
#include <bits/stdc++.h> #include <math.h> using namespace std; int powofTwo(int arr[],int n){ int count=0; for(int i=0;i<n;i++){ if( floor(log2(arr[i])) == ceil(log2(arr[i])) ) { count++; } else{ ++arr[i]; if( floor(log2(arr[i])) == ceil(log2(arr[i])) ) { count++; } } } return count; } int main(){ int Arr[]={ 5,6,9,3,1 }; int len=sizeof(Arr)/sizeof(Arr[0]); cout<<endl<<"Count of numbers with power of 2 possible: "<<powofTwo(Arr,len); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of numbers with power of 2 possible: 2