একটি ইন্টিজার N ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হলো N-র চেয়ে ছোট उन সংখ্যাগুলোর গণনা করা যেগুলো বাইনারি রূপে প্রকাশ করা যায়। উদাহরণস্বরূপ, যদি ইনপুট N = 12 হয়, তবে ১২-র চেয়ে ছোট বাইনারি সংখ্যাগুলো হলো ১, ১০, ১১ — মোট ৩টি।
উদাহরণ ১
ইনপুট
N=100
আউটপুট
N-র চেয়ে ছোট বাইনারি ডিজিট সংখ্যাগুলোর গণনা: 4
ব্যাখ্যা
১০০-র চেয়ে ছোট বাইনারি সংখ্যাগুলো: ১, ১০, ১১, ১০০
উদাহরণ ২
ইনপুট
N=120
আউটপুট
N-র চেয়ে ছোট বাইনারি ডিজিট সংখ্যাগুলোর গণনা: 7
ব্যাখ্যা
১২০-র চেয়ে ছোট বাইনারি সংখ্যাগুলো: ১, ১০, ১১, ১০০, ১০১, ১১০, ১১১
প্রয়োগ করা পদ্ধতি
এই পদ্ধতিতে একটি ইন্টিজার ভেক্টর vec ব্যবহার করা হয়। প্রথমে এতে ১ যোগ করা হয়। এরপর ভেক্টরের শেষ এলিমেন্টটি (আরম্ভে ১) বের করে পরবর্তী বাইনারি সংখ্যা দুটি তৈরি করা হয়: temp*10 এবং temp*10+1। কারণ বাইনারি সংখ্যাগুলো সর্বদা এই প্যাটার্ন মেনে চলে (১, ১০, ১১, ১০০, ১১০, ১১১...।)। ভেক্টর থেকে সংখ্যাগুলো বের করে যদি সেটি N-র চেয়ে ছোট বা সমান হয় তবে কাউন্ট বাড়ানো হয়।
ইনপুট হিসেবে ইন্টিজার
Nনিন।Smaller_N(int N)ফাংশনটিNগ্রহণ করেN-র চেয়ে ছোট বাইনারি ডিজিট সংখ্যাগুলোর গণনা রিটার্ন করে।আরম্ভিক কাউন্ট ০ রাখুন।
০ এবং ১ ডিজিট ব্যবহার করে সংখ্যাগুলো সংরক্ষণের জন্য ইন্টিজার ভেক্টর
vecনিন।vec.push_back(1)দিয়ে ১ যোগ করুন।whileলুপ দিয়েvecট্রুভার্স করুন এবং শেষে পুশ করা এলিমেন্টটিtemp = vec.back()হিসেবে নিয়ে ভেক্টর থেকে মুছে দিন।যদি
temp <= Nহয়, তবে কাউন্ট বাড়ান এবং পরবর্তী দুটি বাইনারি ইন্টিজারtemp*10এবংtemp*10+1তৈরি করে ভেক্টরে যোগ করুন।লুপ শেষে কাউন্ট রিটার্ন করুন ফলাফল হিসেবে।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int Smaller_N(int N) {
int count = 0;
vector<int> vec;
vec.push_back(1);
while (!vec.empty()) {
int temp = vec.back();
vec.pop_back();
if (temp <= N) {
count++;
int temp_2 = temp * 10;
vec.push_back(temp_2);
vec.push_back(temp_2 + 1);
}
}
return count;
}
int main() {
int N = 1000;
cout << "N-র চেয়ে ছোট বাইনারি ডিজিট সংখ্যাগুলোর গণনা: " << Smaller_N(N);
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:
N-র চেয়ে ছোট বাইনারি ডিজিট সংখ্যাগুলোর গণনা: 8