কম্পিউটার টিউটোরিয়াল

n অঙ্কের নন-ডিক্রিজিং সংখ্যার মোট সংখ্যা

একটি সংখ্যাকে নন-ডিক্রিজিং বলা হয় যখন সকল অঙ্ক (প্রথম স্থান ছাড়া) তার পূর্ববর্তী অঙ্ক থেকে ছোট না হয়। এই অ্যালগরিদমে 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
  1. C++-এ একই সংখ্যক সেট বিট থাকা নম্বরগুলো যোগ করে ম্যাক্সিমাম সাম

  2. শুধু ৩ ও ৮ ডিজিট দিয়ে সংখ্যা তৈরি করা C++-এ

  3. C++ প্রোগ্রাম: মিস্টেরি নাম্বার (Mystery Number) চেক করা

  4. পাইথনে সম সংখ্যক ডিজিট বিশিষ্ট নম্বর খুঁজুন (Find Numbers with Even Number of Digits in Python)