ধরুন আমাদের 0 এবং 9 এর মধ্যে একটি পূর্ণসংখ্যা d আছে, আমাদের কাছে যথাক্রমে নিম্ন এবং উচ্চ সীমা হিসাবে দুটি ধনাত্মক পূর্ণসংখ্যা রয়েছে। নিম্ন এবং উচ্চ সীমানা সহ, নিম্ন এবং উচ্চের মধ্যে সমস্ত পূর্ণসংখ্যাতে d সংখ্যা হিসাবে কতবার ঘটে তা আমাদের খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি d =1, নিম্ন =1, উচ্চ =13 এর মত হয়, তাহলে আউটপুট হবে 6, কারণ d=1 সংখ্যাটি 1,10,11,12,13 এর মত 6 বার হয়।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
একটি ফাংশন শূন্য(), এটি n,
লাগবে-
ret :=0, x :=0
-
যদি n 0 এর সমান হয়, তাহলে −
-
রিটার্ন 1
-
-
শুরু করার জন্য m :=1, যখন m <=n, আপডেট m :=m * 10, do −
-
a :=n / m
-
b :=n mod m
-
z :=a mod 10
-
যদি m-এ অঙ্কের সংখ্যা n-এ অঙ্কের সংখ্যার সমান হয়, তাহলে −
-
লুপ থেকে বেরিয়ে আসুন
-
-
যদি z> x, তাহলে −
-
ret :=ret + ((a / 10) + 1)
-
-
অন্যথায় যখন z x এর মতো হয়, তখন
-
ret :=ret + ((a / 10) * m + (b + 1))
-
-
অন্যথায়
-
ret :=ret + (a / 10)
-
-
-
রিটার্ন রিটার্ন
-
একটি ফাংশন সংজ্ঞায়িত করুন f(), এটি x, n,
লাগবে -
ret :=0
-
শুরু করার জন্য m :=1, যখন m <=n, আপডেট m :=m * 10, do −
-
a :=n / m
-
b :=n mod m
-
z :=a mod 10
-
যদি z> x, তাহলে
-
ret :=ret + ((a / 10) + 1)
-
-
অন্যথায় যখন z x এর মত হয়, তখন −
-
ret :=ret + ((a / 10) * m + (b + 1))
-
-
অন্যথায়
-
ret :=ret + (a / 10)
-
-
যদি x 0 এর সমান হয়, তাহলে −
-
ret :=ret - m
-
-
-
রিটার্ন রিটার্ন
-
মূল পদ্ধতি থেকে নিম্নলিখিতগুলি করুন
-
রিটার্ন রিটার্ন
-
ফেরত f(d, high - f(d, low - 1))
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int digitCount(int x){
int ret = 0;
while (x) {
ret++;
x /= 10;
}
return ret;
}
int zero(int n){
int ret = 0;
int x = 0;
if (n == 0)
return 1;
for (int m = 1; m <= n; m *= 10) {
int a = n / m;
int b = n % m;
int z = a % 10;
if (digitCount(m) == digitCount(n))
break;
if (z > x) {
ret += ((a / 10) + 1) * m;
}
else if (z == x) {
ret += (a / 10) * m + (b + 1);
} else {
ret += (a / 10) * m;
}
cout << ret << endl;
}
return ret;
}
int f(int x, int n){
int ret = 0;
for (int m = 1; m <= n; m *= 10) {
int a = n / m;
int b = n % m;
int z = a % 10;
if (z > x) {
ret += ((a / 10) + 1) * m;
}
else if (z == x) {
ret += (a / 10) * m + (b + 1);
} else {
ret += (a / 10) * m;
}
if (x == 0) {
ret -= m;
}
}
return ret;
}
int digitsCount(int d, int low, int high){
return f(d, high) - f(d, low - 1);
}
};
main(){
Solution ob;
cout << (ob.digitsCount(1,1,13));
} ইনপুট
1,1,13
আউটপুট
6