একটি কোডিং প্রতিযোগিতায় N সংখ্যক অংশগ্রহী দেওয়া আছে। লক্ষ্য হল পেয়ার बनाने के উপায় গণনা করা যখন একজন ব্যক্তি সর্বোচ্চ একজন অন্যের সাথে পেয়ার বানাতে পারে। তাই একটি পেয়ারে সর্বোচ্চ ২ জন অংশগ্রহী থাকবে। অংশগ্রহীদের একলাও অংশ নেওয়ার অনুমতি আছে।
রিকারেন্স ব্যবহার করে সমাধান করা যায়:
- count=1 যখন n=0 বা 1 (শুধু একজন বাকি)
- যদি ব্যক্তিটি একলা থাকে, n হয় n-1
- বাকি পেয়ার বানাতে n-2 জন বাকি
- count = makePairs(p-1) + (p-1)*makePairs(p-2)
উদাহরণ
ইনপুট: persons=3
আউটপুট: পেয়ার বানানোর উপায়: ৪
ব্যাখ্যা: a,b,c তিনজন হলে: (a,b)+(c), (a,c)+(b), (b,c)+(a), (a)+(b)+(c) = ৪ উপায়।
ইনপুট: persons=2
আউটপুট: পেয়ার বানানোর উপায়: ২
ব্যাখ্যা: a,b دوজন হলে: (a,b) এবং (a)+(b) = ২ উপায়।
অ্যাপ্রোচ
- person ইন্টিজার ভেরিয়েবলে অংশগ্রহীর সংখ্যা।
makePairs(int p)ফাংশন অংশগ্রহীর সংখ্যা গ্রহণ করে পেয়ার বানানোর উপায় রিটার্ন করে।- প্রাথমিক count ০।
- যদি p==0 বা 1 হয়, count=1 (শুধু একলা থাকার উপায়)।
- অন্যথায় count = makePairs(p-1) + (p-1)*makePairs(p-2)।
উদাহরণ কোড
#include <iostream>
using namespace std;
int makePairs(int p) {
int count = 0;
if (p == 0 || p == 1) {
count = 1;
} else {
count = makePairs(p-1) + (p-1)*makePairs(p-2);
}
return count;
}
int main() {
int persons = 5;
cout << "Number of ways to make pair ( or remain single ):" << makePairs(persons);
return 0;
}
আউটপুট
Number of ways to make pair ( or remain single ): 26