আমাদের শুধুমাত্র 0 এবং 1 এর একটি স্ট্রিং দেওয়া হয়েছে৷ স্ট্রিংটি বাম থেকে ডানে পড়া একটি বাইনারি সংখ্যা উপস্থাপন করে। অর্থাৎ 001 হল 4 এবং 1 নয়। লক্ষ্য হল এমন সব সাবস্ট্রিং খুঁজে বের করা যা একটি জোড় দশমিক সংখ্যার প্রতিনিধিত্ব করে।
আমরা সকল সাবস্ট্রিং এর প্রথম মান পরীক্ষা করে এটি করব, যদি এটি 0 হয় তাহলে সংখ্যাটি 1 হলে সংখ্যাটি বিজোড় হবে। এই sbstr[0]='0’ সহ সমস্ত সাবস্ট্রিং-এর হিসাবে দৈর্ঘ্য-i দ্বারা গণনা বৃদ্ধি করা হবে এমনকি দশমিকে।
আসুন উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট − str=”101”
আউটপুট − বাইনারি স্ট্রিং-এ এমনকি দশমিক মানের সাবস্ট্রিংয়ের সংখ্যা হল − 2
ব্যাখ্যা − সম্ভাব্য সাবস্ট্রিংগুলি হল:10, 11, 01, 0, 1 যার মধ্যে 01 হল 2 এবং 0 হল 0, 2টি জোড়৷
ইনপুট − str="111"
আউটপুট − একটি বাইনারি স্ট্রিং-এ এমনকি দশমিক মানের সাবস্ট্রিংয়ের সংখ্যা হল − 0
ব্যাখ্যা − সাবস্ট্রিংগুলি সম্ভব হল − 11,1 যার মধ্যে একটিও সমান নয়৷
৷নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমরা একটি স্ট্রিং স্ট্রিং নিই শুধুমাত্র 0 এবং 1 হিসাবে।
-
str এর দৈর্ঘ্য len=str.length()
এ সংরক্ষণ করুন -
ফাংশন count_even(string str, int length) স্ট্রিং এবং এর দৈর্ঘ্য নেয় এবং একটি জোড় দশমিক সংখ্যা গঠন করে এমন সাবস্ট্রিংগুলির গণনা প্রদান করে।
-
FOR লুপ ব্যবহার করে ট্র্যাভার্স স্ট্রিং
-
সূচী i=0 থেকে শুরু করে i
-
যদি কোনো str[i]==’0’ মানে এটি থেকে শুরু হওয়া সমস্ত সাবস্ট্রিং এমনকি দশমিকে হবে।
-
দৈর্ঘ্য-i হিসাবে বৃদ্ধি গণনা।
-
ফলাফল হিসাবে রিটার্ন গণনা।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int count_even(string str, int length){ int count = 0; for (int i = 0; i < length; i++){ if (str[i] == '0'){ count += (length - i); } } return count; } int main(){ string str = "00111"; int len = str.length(); cout<<"Count of even decimal value substrings in a binary string are: "<<count_even(str, len) << endl; return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেCount of even decimal value substrings in a binary string are: 9