এই টিউটোরিয়ালে, আমরা একটি সংখ্যাকে ন্যূনতম সিউডো-বাইনারি (pseudo-binary) সংখ্যাগুলোর যোগফল হিসেবে প্রকাশ করার কথা আলোচনা করব। সিউডো-বাইনারি সংখ্যা হলো যেসব সংখ্যা শুধু বাইনারি ডিজিট (০ এবং ১) দিয়ে গঠিত। সিউডো-বাইনারি সংখ্যার উদাহরণ: 00, 11, 10, 100, 111, 1011, ইত্যাদি।
নিচে কিছু উদাহরণ দেওয়া হলো সংখ্যাগুলোকে সিউডো-বাইনারি সংখ্যাগুলোর যোগফল হিসেবে প্রকাশ করা।
Input : 23 Output : 11 + 11 + 1 Explanation : 23 = 11 + 11 + 1, সিউডো-বাইনারি সংখ্যা (11, 11, 1) এর যোগফল 23। Input : 50 Output : 10 + 10 + 10 + 10 + 10
সমাধানের পদ্ধতি
নিচে N কে প্রকাশ করার জন্য ন্যূনতম সিউডো-বাইনারি সংখ্যা বের করার একটি সেরা পদ্ধতি দেওয়া হলো।
একটি সংখ্যা X নিন এবং এর ডিজিটগুলো N-এর ডিজিট অনুযায়ী ১ বা ০ আপডেট করুন।
N-এর প্রতিটি প্লেসের ডিজিট চেক করুন,
যদি ০ হয়, তবে X-এর সেই প্লেসকে ০ আপডেট করুন।
যদি ০ না হয়, তবে X-এর সেই প্লেসকে ১ আপডেট করুন।
ধরুন N = 32, তবে X হবে 11।
তবে X হবে একটি সিউডো-বাইনারি সংখ্যা।
এখন N কে X দিয়ে ডিক্রিমেন্ট করুন এবং ধাপ ১ পুনরাবৃত্তি করুন যতক্ষণ N শূন্য হয় না।
উদাহরণ
উপরোক্ত পদ্ধতির জন্য C++ কোড
#include<iostream> using namespace std; int main(){ int N = 51; // N ০ হয় না পর্যন্ত একটি সিউডো-বাইনারি সংখ্যা খুঁজে বের করুন। cout << "pseudo-binary representation of " << N << " is: "; while (N > 0){ // N অনুযায়ী ০ এবং ১ ধারণকারী X খুঁজে বের করুন। int temp = N; int X = 0, bit = 1; // N-এর প্রতিটি প্লেস চেক করুন শূন্য বা নন-শূন্য। while (temp!=0){ int last_dig = temp % 10; temp = temp / 10; if (last_dig != 0) X += bit; bit *= 10; } // একটি সিউডো-বাইনারি সংখ্যা প্রিন্ট করুন। cout << X << " "; // X দিয়ে বিয়োগ করে N আপডেট করুন। N = N - X; } return 0; }
আউটপুট
pseudo-binary representation of 51 is: 11 10 10 10 10
কোড বুঝা
বহির্দের while লুপ N নেওয়ার জন্য এবং প্রতিটি প্লেসের ডিজিট পিক করে X বের করার জন্য।
আমরা temp ভেরিয়েবলকে N দিয়ে আপডেট করি এবং অভ্যন্তরীণ লুপ temp-এর প্রতিটি প্লেস চেক করে এবং সেই প্লেসের X ভেরিয়েবল আপডেট করে।
X-এর মান প্রিন্ট করুন কারণ সেটি একটি সিউডো-বাইনারি সংখ্যা।
আমরা N কে X দিয়ে বিয়োগ করে আপডেট করি এবং বহির্দের লুপে আবার যাই যতক্ষণ N ০ হয়।
উপসংহার
এই টিউটোরিয়ালে, আমরা আলোচনা করেছি কিভাবে একটি সংখ্যাকে ন্যূনতম সম्भব সিউডো-বাইনারি সংখ্যাগুলোর যোগফল হিসেবে প্রকাশ করা যায়। আমরা সকল সিউডো-বাইনারি সংখ্যা বের করার পদ্ধতি আলোচনা করেছি। আমরা এর জন্য C++ কোডও আলোচনা করেছি যা আমরা C, Java, Python ইত্যাদি যেকোনো প্রোগ্রামিং ভাষায় লিখতে পারি। আশা করি আপনি এই টিউটোরিয়ালটিকে উপকারী পাবেন।