একটি সংখ্যা N ইনপুট হিসেবে দেওয়া আছে। লক্ষ্য হল N পর্যন্ত এমন সংখ্যা m বের করা যারা নিচের শর্ত পূরণ করে (N ≤ 10⁹):
m + sum(m) + sum(sum(m)) = N। এখানে sum(m) হল m-এর ডিজিটগুলোর যোগফল।
যদি m = 137 হয়, তবে sum(m) = 1+3+7 = 11 এবং sum(sum(m)) = sum(11) = 1+1 = 2।
উদাহরণ দিয়ে বোঝা যাক
উদাহরণ ১
ইনপুট - N = 27
আউটপুট - শর্ত পূরণকারী সংখ্যার সংখ্যা: ৩
ব্যাখ্যা - সংখ্যাগুলো:
- 9 (9 + 9 + 9 = 27)
- 15 (15 + (1+5) + 6 = 27)
- 21 (21 + (2+1) + 3 = 27)
উদাহরণ ২
ইনপুট - N = 81
আউটপুট - শর্ত পূরণকারী সংখ্যার সংখ্যা: ২
ব্যাখ্যা - সংখ্যাগুলো:
- 63 (63 + (6+3) + 9 = 81)
- 66 (66 + (6+6) + (1+2) = 81)
প্রোগ্রামে ব্যবহৃত পদ্ধতি
এই পদ্ধতিতে সংখ্যাগুলোর ডিজিট সম হিসাব করে N-র সাথে তুলনা করা হয়। যদি হিসাব করা সম N-র সমান হয় তবে কাউন্ট বাড়ানো হয়।
সর্বোচ্চ সংখ্যা 10⁹ হলে ডিজিট সম সর্বোচ্চ ৮১ (৯×৯) এবং sum(sum(m))-র সর্বোচ্চ ১৬ (৭৯-এর জন্য ৭+৯)। তাই N-97 থেকে N পর্যন্ত চেক করলেই যথেষ্ট।
- ইন্টিজার N ইনপুট নিন।
- ফাংশন
total(int num)সংখ্যার ডিজিট সম রিটার্ন করে। res_totalএবংres০ দিয়ে ইনিশিয়ালাইজ করুন।- হোয়াইল লুপে প্রতিটি ডিজিট নিন (
res = num%10),res_total-এ যোগ করুন,num/=10। res_totalরিটার্ন করুন।- ফাংশন
condition(int N)N নিয়ে শর্ত পূরণকারী সংখ্যা রিটার্ন করে। - প্রাথমিক কাউন্ট ০।
- i=N-97 থেকে i<=N পর্যন্ত FOR লুপ।
temp_1 = total(i),temp_2 = total(temp_1)।temp_3 = i + temp_1 + temp_2। যদিtemp_3 == Nহয় তবে কাউন্ট বাড়ান।- লুপ শেষে কাউন্ট রিটার্ন করুন।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int total(int num) {
int res_total = 0;
int res = 0;
while (num > 0) {
res = num % 10;
res_total = res_total + res;
num = num / 10;
}
return res_total;
}
int condition(int N) {
int count = 0;
for (int i = N - 97; i <= N; i++) {
int temp_1 = total(i);
int temp_2 = total(temp_1);
int temp_3 = i + temp_1 + temp_2;
if (temp_3 == N) count++;
}
return count;
}
int main() {
int N = 9999;
cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N);
return 0;
}
উপরের কোড রান করলে নিচের আউটপুটটি পাওয়া যাবে:
আউটপুট
Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2