কম্পিউটার

C++ এ K দূরত্বে তৈরি করতে প্রথম N সংখ্যাগুলিকে পুনরায় সাজান


আমাদেরকে পূর্ণসংখ্যার ভেরিয়েবল দেওয়া হয়েছে, ধরা যাক, N এবং K। কাজ হল প্রথমে N-এর পারমুটেশন গণনা করা এবং তারপর পারমুটেশনকে এমনভাবে সাজানো যাতে প্রতিটি উপাদান থেকে K দূরত্ব হয়।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

ইনপুট − int n =20, int k =2

আউটপুট − K দূরত্বে তৈরি করার জন্য প্রথম N সংখ্যাগুলির পুনর্বিন্যাস হল:3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18৷

ব্যাখ্যা − আমাদের পূর্ণসংখ্যার ভেরিয়েবল দেওয়া হয়েছে 'N' অর্থাৎ 20 এবং 'K' অর্থাৎ 2। এখন আমরা 'N'-এর যথাক্রমে 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 গণনা করব , 12, 13, 14, 15, 16, 17, 18. 19, 20. এখন, আমরা এমনভাবে উপাদানগুলিকে সাজাব যাতে সমস্ত উপাদান প্রতিটি উপাদান থেকে 'k' দূরত্বে থাকবে।

ইনপুট − int n =10, int k =3

আউটপুট − প্রথম N সংখ্যাগুলিকে K দূরত্বে তৈরি করার জন্য পুনর্বিন্যাস হল:সম্ভব নয়

ব্যাখ্যা − আমাদেরকে পূর্ণসংখ্যার ভেরিয়েবল দেওয়া হয়েছে 'N' অর্থাৎ 10 এবং 'K' অর্থাৎ 3। এখন আমরা 'N'-এর যথাক্রমে 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 গণনা করব। এখন , আমরা উপাদানগুলিকে এমনভাবে সাজাব যাতে সমস্ত উপাদান প্রতিটি উপাদান থেকে 'k' দূরত্বে থাকবে তবে প্রদত্ত ইনপুট মানগুলির সাথে এটি সম্ভব নয়৷

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

  • ইনপুট একটি পূর্ণসংখ্যা টাইপ উপাদান যেমন 'N' এবং 'K'।

  • একটি প্যারামিটার হিসাবে একটি ফাংশনে N এবং K পাস করে ফাংশন পুনর্বিন্যাস (int n, int k) এ কল করুন৷

  • ফাংশনের ভিতরে পুনর্বিন্যাস (int n, int k)

    • টেম্প হিসাবে একটি পূর্ণসংখ্যা ভেরিয়েবল ঘোষণা করুন এবং এটি n % (2 * k) দিয়ে সেট করুন।

    • n + 1 আকারের ptr হিসাবে একটি পূর্ণসংখ্যা টাইপ অ্যারে ঘোষণা করুন অর্থাৎ prt[n+1]।

    • IF k =0 চেক করুন তারপর i থেকে 1 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না i আকারের চেয়ে কম হয় এবং i কে 1 দ্বারা বৃদ্ধি করুন এবং i প্রিন্ট করুন।

    • পরীক্ষা করুন যদি তাপমাত্রা 0 এর সমান না হয় তাহলে প্রিন্ট করা সম্ভব নয়।

    • i থেকে 1 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না i N থেকে কম হয় এবং i এর সাথে ptr[i] সেট করুন।

    • i থেকে 1 থেকে i n কম না হওয়া পর্যন্ত FOR লুপ শুরু করুন এবং i + 2 * k দিয়ে i সেট করুন। লুপের ভিতরে, j থেকে 1 থেকে j পর্যন্ত k থেকে কম পর্যন্ত FOR আর একটি লুপ শুরু করুন এবং j কে 1 দ্বারা বৃদ্ধি করুন। লুপের ভিতরে, ptr[i + j -1] এবং ptr[k + i + j পাস করে একটি swa পদ্ধতি কল করুন - 1] একটি প্যারামিটার হিসাবে।

    • স্টার্ট লুপ FOR i থেকে 1 tll i এর থেকে কম এবং i 1 দ্বারা বৃদ্ধি করুন।

    • প্রিন্ট prt[i]।

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int n, int k){
   int temp = n % (2 * k);
   int ptr[n + 1];
   if(k == 0){
      for(int i = 1; i <= n; i++){
         cout << i << " ";
      }
      return;
   }
   if(temp != 0){
      cout<<"Not Possible";
      return;
   }
   for(int i = 1; i <= n; i++){
      ptr[i] = i;
   }
   for(int i = 1; i <= n; i += 2 * k){
      for(int j = 1; j <= k; j++){
         swap(ptr[i + j - 1], ptr[k + i + j - 1]);
      }
   }
   for(int i = 1; i <= n; i++){
      cout << ptr[i] << " ";
   }
}
int main(){
   int n = 20;
   int k = 2;
   cout<<"Rearrangement of first N numbers to make them at K distance is: ";
   Rearrangement(n, k);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Rearrangement of first N numbers to make them at K distance is: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18

  1. C++ এ ট্রাইবোনাচি সংখ্যা

  2. C++ এ Tetranacci সংখ্যা

  3. প্রথম n প্রাকৃতিক সংখ্যার ঘনক্ষেত্রের যোগফলের জন্য C++ প্রোগ্রাম?

  4. প্রথম n প্রাকৃতিক সংখ্যার বর্গের সমষ্টির জন্য C++ প্রোগ্রাম?