আমাদেরকে পূর্ণসংখ্যার ভেরিয়েবল দেওয়া হয়েছে, ধরা যাক, 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