আমাদের 0 থেকে 9 সংখ্যার একটি স্ট্রিং দেওয়া হয়েছে৷ স্ট্রিংটি একটি দশমিক সংখ্যাকে উপস্থাপন করে৷ লক্ষ্য হল এমন সমস্ত সাবস্ট্রিং খুঁজে বের করা যা একটি দশমিক সংখ্যাকে প্রতিনিধিত্ব করে যা X সংখ্যার চেয়ে বড়। শর্ত হল সাবস্ট্রিং 0 দিয়ে শুরু হওয়া উচিত নয়। যেমন “2021”, “02”, “021”। "0" অন্তর্ভুক্ত করা হবে না।
আমরা সব সাবস্ট্রিং-এর প্রথম মান পরীক্ষা করে এটি করব, যদি এটি 0-এর বেশি হয় তাহলে stoi() ব্যবহার করে পূর্ণসংখ্যাতে রূপান্তর করে সেই সূচক থেকে সাবস্ট্রিং তৈরি করা শুরু করি। যদি সাবস্ট্রিং>এক্স ইনক্রিমেন্ট কাউন্ট।
আসুন উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট − str=”123” X=12
আউটপুট − X-এর থেকে বেশি সাংখ্যিক মান সহ সাবস্ট্রিংগুলির সংখ্যা হল − 2
ব্যাখ্যা সাবস্ট্রিং> 12 হল 123 এবং 23।
ইনপুট − str=”111” X=100
আউটপুট − বাইনারি স্ট্রিং-এ এমনকি দশমিক মানের সাবস্ট্রিংয়ের সংখ্যা হল − 1
ব্যাখ্যা শুধুমাত্র 111 হল 100 এর থেকে বড়।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
আমরা একটি স্ট্রিং স্ট্রিংকে শুধুমাত্র সংখ্যার স্ট্রিং হিসাবে নিই।
-
str এর দৈর্ঘ্য len=str.length()
এ সংরক্ষণ করুন -
ফাংশন greater_X(string str, int x) স্ট্রিং এবং এর দৈর্ঘ্য নেয় এবং সাবস্ট্রিংগুলির একটি গণনা প্রদান করে যা X-এর চেয়ে বড় একটি দশমিক সংখ্যা গঠন করে।
-
FOR লুপ ব্যবহার করে ট্র্যাভার্স স্ট্রিং
-
সূচী i=0 থেকে শুরু করে i
-
যদি কোন str[i]!='0’ মানে এটি থেকে শুরু হওয়া সমস্ত সাবস্ট্রিং বৈধ হবে।
-
সূচী j=1 থেকে শুরু করে i+j
-
stoi() ব্যবহার করে সাবস্ট্রিং str.substr(i,j) কে দশমিকে রূপান্তর করুন। যদি এটি X এর বেশি হয়। বৃদ্ধির সংখ্যা।
-
ফলাফল হিসাবে রিটার্ন গণনা।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int greater_X(string str, int x){ int count = 0; int len = str.length(); for (int i = 0; i < len; ++i){ if(str[i] != '0'){ for (int j=1; (i + j) <= len; ++j){ if (stoi(str.substr(i, j)) > x){ count++; } } } } return count; } int main(){ string str = "987"; int x = 100; cout<<"Count of number of substrings with numeric value greater than X are: "<<greater_X(str, x); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেCount of number of substrings with numeric value greater than X are: 1