আমাদের ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে দেওয়া হয়েছে৷ লক্ষ্য হল সংখ্যাগুলির গণনা খুঁজে বের করা যেগুলিকে সর্বাধিক একবার 1 যোগ করে দুটির শক্তি করা যেতে পারে৷
আমরা log2(i) ব্যবহার করে পরীক্ষা করব যে সংখ্যাটি দুটির শক্তি বা এটিতে 1 যোগ করে দুটির শক্তি হতে পারে। যদি হ্যাঁ ইনক্রিমেন্ট কাউন্ট।
উদাহরণ দিয়ে বোঝা যাক।
ইনপুট − arr[]={1,3,2,5,6 },
আউটপুট − সংখ্যার গণনা যা 2:3 এর শক্তিতে পরিণত হতে পারে
ব্যাখ্যা − 1+1=2 → 21 , 3+1=4 → 22 , 2=21 অন্যান্য হয়ে যাবে 5+1=6, 6+1=7
ইনপুট − arr[]={2,4,8,16},
আউটপুট − সংখ্যার গণনা যা 2:4 এর শক্তিতে পরিণত হতে পারে
ব্যাখ্যা − সমস্ত 4টি সংখ্যা ইতিমধ্যেই 2 এর শক্তি।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমরা এলোমেলো ধনাত্মক সংখ্যা দিয়ে শুরু করা একটি পূর্ণসংখ্যা অ্যারে অ্যারে নিই।
-
ফাংশন 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