আমাদেরকে একটি পূর্ণসংখ্যা পরিসীমা দেওয়া হয়েছে, একটি চলক 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