总实现:
#include <iostream>
using namespace std;
long long CC(int a, int b)//求组合函数,a为C的下标,b为C上标,即:C=a!/(b!*(a-b)!)
{
int res = 1; //记录结果
for (int i = a, j = 1; j <= b; i--, j++)
{
res *= i / j;
}
return res;
}
long long AA(int a, int b)//求排列函数,a为A的下标,b为A的上标,即:A=a!/b!
{
int res = 1; //记录结果
int num = a; //用于阶乘
for (int i = 0; i < a - b; i++) //要循环的次数为a-b次。
{
res *= num;
num--;
}
return res;
}
int main()
{
int k = CC(5, 3);
cout << k << endl;
int kk = AA(5, 3);
cout << kk << endl;
return 0;
}
关于组合函数:
long long CC(int a, int b)//求组合函数,a为C的下标,b为C上标,即:C=a!/(b!*(a-b)!) { int res = 1; //记录结果 for (int i = a, j = 1; j <= b; i--, j++) { res *= i / j; } return res; }
比如
可知,由于约分,分母与分子的因子的个数都相等,且都为(比如)a-b个因子,所以可以由该函数,让分母从1开始且增大到b来实现组合()。
关于排列函数:
long long AA(int a, int b)//求排列函数,a为A的下标,b为A的上标,即:A=a!/b! { int res = 1; //记录结果 int num = a; //用于阶乘 for (int i = 0; i < a - b; i++) //要循环的次数为a-b次。 { res *= num; num--; } return res; }
比如,可知要实现排列函数,用阶乘就行,阶乘循环的次数就是(比如)a-b次