কম্পিউটার

প্রদত্ত দৈর্ঘ্যের সমস্ত সিকোয়েন্স C++ এ প্রিন্ট করুন


এই সমস্যায়, আমাদের দুটি পূর্ণসংখ্যার মান দেওয়া হয়েছে, k, এবং n। এবং আমাদের 1 থেকে n পর্যন্ত সংখ্যার k দৈর্ঘ্যের সমস্ত ক্রমগুলিকে সাজানো ক্রমে প্রিন্ট করতে হবে৷

বিষয়টি বোঝার জন্য একটি উদাহরণ নেওয়া যাক −

Input:k = 2 ; n = 3
Output:
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

সুতরাং এই সমস্যায়, আমাদের উপরে বর্ণিত সিকোয়েন্সটি প্রিন্ট করতে হবে।

এই সমস্যাটি সমাধান করার একটি সহজ উপায় হল ক্রমটির পূর্ণসংখ্যা বৃদ্ধি করা যতক্ষণ না তারা সর্বাধিক মান অর্থাৎ n এ পৌঁছায়। নিচে সমাধানের বিশদ বিবরণ দেওয়া হল।

অ্যালগরিদম

1) Create an array of size k with all values = 1 i.e. {1, 1, ..ktimes}.
2) Repeat step 3 and 4 till the array becomes {n, n, …, n}.
3) Print the array.
4) Increment the value such that the elements of the array become the next value. For example, {1, 1, 1} incremented to {1, 1, 2} and {1, 3, 3} incremented to {2, 1, 1}. For this we need to check the kth element of the array, if it’s equal to n become update, then check k-1 element in the sequence and so on for the same condition.

উদাহরণ

নিম্নলিখিত প্রোগ্রামটি আপনার কাছে ধারণাটিকে আরও স্পষ্ট করবে৷

#include<iostream>
using namespace std;
void printSequence(int arr[], int size){
   for(int i = 0; i < size; i++)
      cout<<arr[i]<<"\t";
   cout<<endl;
   return;
}
int nextElement(int arr[], int k, int n){
   int s = k - 1;
   while (arr[s] == n)
      s--;
   if (s < 0)
      return 0;
   arr[s] = arr[s] + 1;
   for(int i = s + 1; i < k; i++)
      arr[i] = 1;
   return 1;
}
void generateSequence(int n, int k){
   int *arr = new int[k];
   for(int i = 0; i < k; i++)
      arr[i] = 1;
   while(1){
      printSequence(arr, k);
   if(nextElement(arr, k, n) == 0)
      break;
   }
   return;
}
int main(){
   int n = 3;
   int k = 2;
   cout<<"The sequence is :\n";
   generateSequence(n, k);
   return 0;
}

আউটপুট

ক্রম হল −

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

এই পদ্ধতিটি বোঝা সহজ তবে এটি আরও ভাল এবং আরও কার্যকর করা যেতে পারে৷

এই পদ্ধতিটি অনুক্রম অফসেট পরীক্ষা করার জন্য পুনরাবৃত্তি এবং একটি অতিরিক্ত সূচক ব্যবহার করে (মান যার পরে ক্রমটি ফ্লিপ করা হবে)। ফাংশনটি পুনরাবৃত্তভাবে বলা হবে এবং সূচক পর্যন্ত শর্তাবলী আপডেট করবে না। এবং ইনডেক্সের পরে পরবর্তী পদগুলির জন্য ফাংশনটি পুনরুদ্ধার করুন।

উদাহরণ

#include<iostream>
using namespace std;
void printSequence (int arr[], int size){
   for (int i = 0; i < size; i++)
      cout << arr[i] << "\t";
   cout << endl;
   return;
}
void generateSequence (int arr[], int n, int k, int index){
   int i;
   if (k == 0){
      printSequence (arr, index);
   }
   if (k > 0){
      for (i = 1; i <= n; ++i){
         arr[index] = i;
         generateSequence (arr, n, k - 1, index + 1);
      }
   }
}
int main (){
   int n = 3;
   int k = 2;
   int *arr = new int[k];
   cout<<"The sequence is:\n";
   generateSequence (arr, n, k, 0);
   return 0;
}

আউটপুট

ক্রম হল −

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

  1. C++ এ প্রদত্ত নোড থেকে k দূরত্বে সমস্ত নোড প্রিন্ট করুন

  2. একটি প্রদত্ত উত্স থেকে একটি গন্তব্য C++ এ সমস্ত পথ প্রিন্ট করুন

  3. একটি প্রদত্ত স্ট্রিং এর সমস্ত সাবস্ট্রিং C++ এ প্রিন্ট করার জন্য প্রোগ্রাম

  4. C++ এ একটি প্রদত্ত পরিসরে সমস্ত প্যালিনড্রোম প্রিন্ট করার জন্য প্রোগ্রাম