请写一个程序,求出n中取r个的组合系数C(n,r)
首先,根据C(n,r)的定义求解,不难得出解法如下:
unsigned long cnr(int n, int r)
{
if (n < 0 || r < 0)
return 0;
unsigned long numerator = 1;
unsigned long denominator = 1;
for (int i = 0; i < r; i++)
numerator *= (n - i);
for (int i = 1; i <= r; i++)
denominator *= i;
return numerator / denominator;
}
利用公式C(n,r)=C(n-1,r-1)+C(n-1,r)来化简求解:
#include <iostream>
using namespace std;
#define MAXSIZE 100
unsigned long cnr(int n, int r)
{
unsigned long c[MAXSIZE];
int i, j;
for (i = 0; i <= r; i++)
c[i] = 1;
for (i = 1; i <= n - r; i++)
for (j = 1; j <= r; j++)
c[j] += c[j - 1];
return c[r];
}
void main()
{
int result = cnr(10, 2);
cout << "result