এই সমস্যায়, আমাদের দুটি মান দেওয়া হয়েছে যা হল সমষ্টি (সংখ্যার সংখ্যা নির্দেশ করে) এবং অঙ্ক (অঙ্কের সংখ্যা নির্দেশ করে)। আমাদের কাজ হল প্রদত্ত সংখ্যার সংখ্যা এবং অঙ্কের যোগফল সহ সবচেয়ে ছোট সংখ্যাটি খুঁজে বের করা৷
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
sum = 15, dgiti = 2
আউটপুট
69
ব্যাখ্যা
যোগফল 15 সহ সমস্ত 2 সংখ্যার সংখ্যা হল :69, 78, 87, 96৷
সমাধান পদ্ধতি
সমস্যার একটি সহজ সমাধান হল ডিজিট কাউন্ট সহ সমস্ত সংখ্যাকে অঙ্ক হিসাবে বিবেচনা করা এবং সবচেয়ে ছোট সংখ্যাটি সন্ধান করা যার অঙ্কের যোগফল যোগফলের সমান।
একটি দক্ষ সমাধান লোভী পন্থা ব্যবহার করা হয়. আমরা শেষ সংখ্যা থেকে উপাদানগুলি পূরণ করে তারপর নম্বর তৈরি করব অর্থাৎ সংখ্যার LSB৷ আমরা LSB-এর জন্য সম্ভাব্য বৃহত্তম উপাদান বিবেচনা করব এবং তারপরে পরবর্তী অবস্থানে যাব৷
আমরা LSB কে যতটা সম্ভব বড় এবং MSB কে যতটা সম্ভব ছোট রাখার চেষ্টা করব।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream> using namespace std; void findSmallestNumWithSum(int digit, int sum) { if (sum == 0) { if(digit == 1) cout<<"Smallest number is 0"; else cout<<"Smallest number with sum cannot be found"; return ; } if (sum > 9*digit) { cout<<"Smallest number with sum cannot be found"; return ; } int number[digit]; sum -= 1; for (int i = digit-1; i>0; i--) { if (sum > 9) { number[i] = 9; sum -= 9; } else { number[i] = sum; sum = 0; } } number[0] = sum + 1; cout<<"Smallest number is "; for (int i=0; i<digit; i++) cout<<number[i]; } int main() { int sum = 15, digit = 3; findSmallestNumWithSum(digit, sum); return 0; }
আউটপুট
Smallest number is 159