আমাদেরকে ভেরিয়েবল থেকে শুরু করে একটি পূর্ণসংখ্যা রেঞ্জ দেওয়া হয়েছে চলুন বলি ভেরিয়েবলের শেষ পর্যন্ত শুরু করুন এবং একটি ভেরিয়েবল k এবং কাজটি হল পরিসরের সংখ্যা গণনা করা যাতে সংখ্যাগুলিতে 'k' অ-শূন্যের বেশি না থাকে। সংখ্যা।
উদাহরণস্বরূপ
ইনপুট - int start =50, end =100 এবং K =2;
আউটপুট - পরিসরে সংখ্যার গণনা যেখানে সংখ্যাটিতে K-এর চেয়ে বেশি শূন্য সংখ্যা নেই:50
ব্যাখ্যা - পরিসরটি 50 থেকে 100 পর্যন্ত শুরু হয় এবং আমাদেরকে 2 হিসাবে k দেওয়া হয়েছে। আমরা দেখতে পাচ্ছি, 50 থেকে 100-এর মধ্যে সমস্ত সংখ্যায় 2-অঙ্কের সংখ্যা রয়েছে যা 100 নম্বরটি ছাড়া 2টির বেশি শূন্য সংখ্যা ধারণ করা অসম্ভব করে তোলে। একটি 3-সংখ্যার সংখ্যা কিন্তু এটিতে 2 শূন্যও থাকবে তার থেকে বেশি নয় তাই গণনা 50।
ইনপুট - int start =50, end =100 এবং K =1;
আউটপুট - পরিসরে সংখ্যার গণনা যেখানে সংখ্যাটিতে K অ শূন্যের বেশি থাকে না
সংখ্যা হল:5
ব্যাখ্যা - পরিসরটি 50 থেকে 100 পর্যন্ত শুরু হয় এবং আমাদেরকে 1 হিসাবে k দেওয়া হয়েছে। আমরা দেখতে পাচ্ছি, 50 থেকে 100-এর মধ্যে সমস্ত সংখ্যায় 2-অঙ্কের সংখ্যা রয়েছে তাই 1 বা k-এর বেশি নয় এমন সংখ্যাগুলি 50 নয়। , 60, 70, 80 এবং 90 তাই গণনা হল 5।
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ভেরিয়েবলের শুরু থেকে ভেরিয়েবল শেষ পর্যন্ত পূর্ণসংখ্যার একটি পরিসর তৈরি করুন এবং k ঘোষণা করুন এবং মানটি ইনপুট করুন। আরও প্রক্রিয়াকরণের জন্য ফাংশনে ডেটা পাস করুন।
- ভেক্টর টাইপের একটি ভেরিয়েবল তৈরি করুন, আসুন vec বলি।
- স্টার্ট লুপ যতক্ষণ না ভ্যালু ভ্যারিয়েবল স্টার্টের ভিতরে থাকে। এখন, কিছুক্ষণের মধ্যে ভ্যাল % 10 হিসাবে মানটিকে ভেক্টরে পুশ করুন এবং val / 10 হিসাবে সেট করুন৷
- এসটিএল-এ রিভার্স ফাংশনকে কল করুন vec.begin() এবং vec.end() এর যুক্তি হিসেবে।
- মেমসেট ব্যবহার করে অ্যারের মানগুলি -1 হিসাবে সেট করুন।
- চেক_ভাল (0, 0, 0, vec) ফেরত দিন যা একটি ফাংশন যা পরীক্ষা করবে যে সংখ্যাগুলি শূন্য নয় কি না।
- চেক_ভাল ফাংশনের ভিতরে-:
- একটি ভেক্টরের আকারের সমান IF স্থানটি পরীক্ষা করুন তারপর IF temp চেক করুন <=k তারপর 1 দিন বা 0 দিন৷
- চেক করুন IF arr[place][temp][set_val] -1 এর সমান না তারপর arr[place][temp][set_val]-এ মান দিন।
- ফলাফল সংরক্ষণ করতে ভেরিয়েবল ঘোষণা করুন এবং এটি 0 এ সেট করুন।
- একটি ভেরিয়েবল ভ্যাল ঘোষণা করুন এবং এটিকে 9 এ সেট করুন IF set_val সমান 1 ELSE এটিকে i++ এ সেট করুন
- 0 থেকে ভ্যালু পর্যন্ত লুপ শুরু করুন
- লুপের ভিতরে temp_2 সেট করুন temp হিসাবে এবং চেক করুন IF 1 সমান না 0 তারপর temp_2 এর মান 1 দ্বারা বৃদ্ধি করুন এবং temp_3 কে set_val হিসাবে সেট করুন এবং i চেক করুন vec[place] এর চেয়ে কম তারপর temp_3 কে 1 হিসাবে সেট করুন
- ফাংশন check_val(place + 1, temp_2, temp_3, vec) ফাংশনে পুনরাবৃত্ত কল হিসাবে গণনার মান সেট করুন
- রিটার্ন arr[place][temp][set_val] সমান গণনা।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int arr[20][20][2]; int K; int check_val(int place, int temp, int set_val, vector < int > vec) { if (place == vec.size()) { if (temp <= K) { return 1; } return 0; } if (arr[place][temp][set_val] != -1) { return arr[place][temp][set_val]; } int count = 0; int val = (set_val ? 9 : vec[place]); for (int i = 0; i <= val; i++) { int temp_2 = temp; if (i != 0) { temp_2++; } int temp_3 = set_val; if (i < vec[place]) { temp_3 = 1; } count += check_val(place + 1, temp_2, temp_3, vec); } return arr[place][temp][set_val] = count; } int Not_more_k(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 check_val(0, 0, 0, vec); } int main() { int start = 50, end = 100; K = 2; int count = Not_more_k(end) - Not_more_k(start); cout << "Count of Numbers in Range where the number does not contain more than K non zero digits are: " << count; return 0; }
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেআউটপুট
Count of Numbers in Range where the number does not contain more than K non zero digits are: 50