আমাদেরকে একটি পূর্ণসংখ্যা পরিসীমা দেওয়া হয়েছে, একটি চলক m যা ভাজক হিসাবে ব্যবহৃত হয় এবং একটি চলক d যা 'd' সংখ্যাটি জোড় অবস্থানে আছে কিনা তা পরীক্ষা করতে ব্যবহৃত হয় এবং কাজটি হল একটি সংখ্যায় সেই সংখ্যাগুলির গণনা করা। পরিসীমা যা চলক m দ্বারা বিভাজ্য এবং সমান অবস্থানে ডিজিট আছে।
উদাহরণস্বরূপ
ইনপুট - int start =20, end =50, d =8 এবং m =4
আউটপুট - m দ্বারা বিভাজ্য এবং জোড় অবস্থানে d সংখ্যা বিশিষ্ট একটি পরিসরে সংখ্যার সংখ্যা হল:2
ব্যাখ্যা - পরিসরটি 20 থেকে 50 পর্যন্ত শুরু হয়। সুতরাং d সংখ্যা অর্থাৎ 8 সহ সম্ভাব্য সংখ্যাগুলি হল 28, 38 এবং 48 যার জোড় অবস্থানে 8 আছে অর্থাৎ 2 এবং সংখ্যাগুলি 24 এবং 48 m অর্থাৎ 4 দ্বারা বিভাজ্য তাই গণনা হল 2৷
ইনপুট - int start =10, end =100, d =6 এবং m =2
আউটপুট - m দ্বারা বিভাজ্য এবং জোড় অবস্থানে d সংখ্যা বিশিষ্ট একটি পরিসরে সংখ্যার সংখ্যা হল:8
ব্যাখ্যা - পরিসরটি 10 থেকে 100 পর্যন্ত শুরু হয়। সুতরাং d সংখ্যা সহ সম্ভাব্য সংখ্যা যেমন 6, 16, 26, 36, 46, 56, 66, 76, 86 এবং 96 সংখ্যা 6 এবং 66 ব্যতীত জোড় অবস্থানে 6 রয়েছে বিজোড় অবস্থান তাই আমরা এটি অন্তর্ভুক্ত করব না এবং এখন আমরা তালিকা থেকে সংখ্যাগুলি পরীক্ষা করব যেগুলি 2 দ্বারা বিভাজ্য তাই সমস্ত সংখ্যা যেমন 16, 26, 36, 46, 56, 76, 86 এবং 96 2 দ্বারা বিভাজ্য তাই গণনা হল 8.
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ভেরিয়েবলের শুরু থেকে ভেরিয়েবলের শেষ পর্যন্ত পূর্ণসংখ্যার একটি পরিসর তৈরি করুন এবং ভেরিয়েবল d এবং m ঘোষণা করুন এবং মানগুলি ইনপুট করুন। আরও প্রক্রিয়াকরণের জন্য ফাংশনে ডেটা পাস করুন।
- ভেক্টর টাইপের একটি ভেরিয়েবল তৈরি করুন, আসুন vec বলি।
- স্টার্ট লুপ যতক্ষণ না ভ্যালু ভ্যারিয়েবল স্টার্টের ভিতরে থাকে। এখন, কিছুক্ষণের মধ্যে ভ্যাল % 10 হিসাবে মানটিকে ভেক্টরে পুশ করুন এবং val / 10 হিসাবে সেট করুন৷
- এসটিএল-এ রিভার্স ফাংশনকে কল করুন vec.begin() এবং vec.end() এর যুক্তি হিসেবে।
- মেমসেট ব্যবহার করে অ্যারের মানগুলি -1 হিসাবে সেট করুন।
- সেট_টোটাল (0, 0, 0, vec) ফেরত দিন যা এমন একটি ফাংশন যা পরীক্ষা করবে যে সংখ্যাগুলি d দিয়ে জোড় অবস্থান এবং m দ্বারা বিভাজ্য কিনা
- সেট_টোটালফাংশনের ভিতরে-:
- IF স্থানটি একটি ভেক্টরের আকারের সমান তা পরীক্ষা করুন তারপর IF temp =0 পরীক্ষা করুন তারপর 1 দিন বা 0 দিন৷
- চেক করুন যদি arr[place][temp][val] -1 এর সমান না হয় তারপর arr[place][temp][val]-এ মান দিন।
- IF জায়গা % 2 =1 চেক করুন তারপর IF val =0 চেক করুন তারপর IF d vec[place] এর থেকে বড় চেক করুন তারপর 0 দিন
- ভেরিয়েবল temp_2 ঘোষণা করুন এবং এটিকে 0 এ সেট করুন।
- দেখুন IF d vec[place] থেকে কম তারপর temp_2 তে 1 সেট করুন।
- ভেরিয়েবল temp_3 ঘোষণা করুন এবং সেট_টোটাল() এ একটি পুনরাবৃত্ত কল করুন এবং arr[place][temp][val] =temp_3 ফেরত দিন
- ফলাফল সংরক্ষণ করতে একটি পরিবর্তনশীল গণনা ঘোষণা করুন।
- একটি পরিবর্তনশীল সেট_সীমা ঘোষণা করুন এবং এটিকে 9 IF val সমান 1 ELSE এ সেট করুন vec[place] দিয়ে।
- সেট_লিমিট পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন এবং চেক করুন যদি আমি d এর সমান তারপর চালিয়ে যান
- একটি ভেরিয়েবলকে temp_2 হিসাবে ঘোষণা করুন এবং এটিকে ভ্যালে সেট করুন
- যদি আমি vec[স্থান] এর চেয়ে কম তা পরীক্ষা করুন তারপর temp_2 কে 1 হিসাবে সেট করুন
- সেট_টোটাল ফাংশনে পুনরাবৃত্ত কলের সাথে গণনা সেট করুন
- রিটার্ন arr[place][temp][val] =গণনা।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int arr[20][20][2];
int d, m;
int set_total(int place, int temp, int val, vector < int > vec) {
if (place == vec.size()) {
if (temp == 0) {
return 1;
}
return 0;
}
if (arr[place][temp][val] != -1) {
return arr[place][temp][val];
}
if (place % 2) {
if (val == 0) {
if (d > vec[place]) {
return 0;
}
}
int temp_2 = val;
if (d < vec[place]) {
temp_2 = 1;
}
int temp_3 = set_total(place + 1, (10 * temp + d) % m, temp_2, vec);
return arr[place][temp][val] = temp_3;
}
int count = 0;
int set_limit = (val ? 9 : vec[place]);
for (int i = 0; i <= set_limit; i++) {
if (i == d) {
continue;
}
int temp_2 = val;
if (i < vec[place]) {
temp_2 = 1;
}
count += set_total(place + 1, (10 * temp + i) % m, temp_2, vec);
}
return arr[place][temp][val] = count;
}
int divisible(int val) {
vector < int > vec;
while (val) {
vec.push_back(val % 10);
val = val / 10;
}
reverse(vec.begin(), vec.end());
memset(arr, -1, sizeof(arr));
return set_total(0, 0, 0, vec);
}
int main() {
int start = 20, end = 50;
d = 8, m = 4;
int count = divisible(end) - divisible(start);
cout << "Count of Numbers in a Range divisible by m and having digit d in even positions are: " << count;
return 0;
} যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেআউটপুট
Count of Numbers in a Range divisible by m and having digit d in even positions are: 2