C++ 中计算配对数,一个人最多与另一个人配对
假设在一个编程竞赛中有 N 个参与者。目标是找到当一个人最多只能与另一个人配对时可能的配对数。因此,一个配对最多包含 2 个参与者。参与者也可以单独参加。
我们可以使用递归来解决这个问题,其中配对数为:
当 n=0 或 1 时,计数=1(只剩下一个人)
如果一个人保持单身,n 减少到 n-1
现在对于剩下的配对,剩下的人数 = n-2
计数=makePairs(p-1) + (p-1)*makePairs(p-2);
让我们用例子来理解。
输入 - 人数=3
输出 - 配对方式的计数 - 4
解释 -
If three persons are a,b,c then ways of pairing could be: (a,b), (c) → c remained single (a,c), (b) → b remained single (b,c), (a) → a remained single (a),(b),(c) → all remained single Total ways = 4
输入 - 人数=2
输出 - 配对方式的计数 - 2
解释 -
I persons are a,b then ways of pairing could be − (a,b) → both paired (a),(b) → both remained single Total ways = 2
下面程序中使用的方案如下
我们使用一个整数 person 来存储参与者的数量。
函数 makePairs(int p) 以人数作为输入,并返回他们可以配对的方式的数量。
将初始计数设为 0。
如果 p=0 或 1,则唯一的方式是 1 保持单身。
否则,一个人可以选择保持单身,然后剩下的 (p-1) 将使用 (p1)*makePairs(p-2) 找到配对。
最后返回计数的值作为最终配对方式的数量。
示例
#include<iostream> using namespace std; int makePairs(int p){ int count=0; // Base condition 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
广告