একটি সংখ্যাকে নন-ডিক্রিজিং বলা হয় যখন সকল অঙ্ক (প্রথম স্থান ছাড়া) তার পূর্ববর্তী অঙ্ক থেকে ছোট না হয়। এই অ্যালগরিদমে n অঙ্কের সংখ্যার মধ্যে কতগুলো নন-ডিক্রিজিং সংখ্যা আছে তা বের করতে হবে।
ধরি count(n, d) একটি ফাংশন যা দৈর্ঘ্য n এবং d অঙ্কে শেষ হওয়া নন-ডিক্রিজিং সংখ্যার সংখ্যা গণনা করে, তাহলে আমরা নিচের সম্পর্কটি লিখতে পারি:
$$count(n,d)=\displaystyle\sum\limits_{i=0}^d count(n-1,i)\\total=\displaystyle\sum\limits_{d=0}^{n-1} count(n-1,d)$$
ইনপুট এবং আউটপুট
ইনপুট: অঙ্কের সংখ্যা, ধরা যাক ৩। আউটপুট: সম্ভাব্য নন-ডিক্রিজিং সংখ্যা। এখানে এটি ২২০। নন-ডিক্রিজিং সংখ্যা যেমন: 111, 112, 123, 789, 569 ইত্যাদি।
অ্যালগরিদম
countNumbers(n)
ইনপুট: প্রদত্ত মান।
আউটপুট: n অঙ্কের সংখ্যা থেকে নন-ডিক্রিজিং মানগুলোর সংখ্যা।
শুরু
(10 x n+1) ক্রমের count ম্যাট্রিক্স সংজ্ঞায়িত করুন এবং ০ দিয়ে পূরণ করুন
i := 0 থেকে 9 পর্যন্ত, করুন
count[i, 1] := 1
끝난
digit := 0 থেকে 9 পর্যন্ত, করুন
len := 2 থেকে n পর্যন্ত, করুন
x := 0 থেকে digit পর্যন্ত, করুন
count[digit, len] := count[digit, len] + count[x, len-1]
끝난
끝난
끝난
nonDecNum := 0
i := 0 থেকে 9 পর্যন্ত, করুন
nonDecNum := nonDecNum + count[i, n]
끝난
nonDecNum ফেরত দিন
শেষ
উদাহরণ (C++)
#include <iostream>
using namespace std;
long long int countNumbers(int n) {
long long int count[10][n+1];
for(int i = 0; i<10; i++)
for(int j = 0; j> n;
cout << "Total non decreasing numbers: " << countNumbers(n);
}
আউটপুট
Enter number of digits: 3 Total non decreasing numbers: 220