方法1
解题思路:
1:组合求解如求C(8,5);等于8!/(3!*5!)=(8*7*6)/(1*2*3);
2:将m=(n-m)>m?(n-m):m;
3:(m+1)到n的累乘除以1到(n-m)的累乘 。
#include<iostream>
using namespace std;
long long C(int n,int m)
{
long long t=1;
m=(n-m)>m?(n-m):m;
for(int i=m+1;i<=n;i++)
t*=i;
for(int i=1;i<=n-m;i++)
t/=i;
return t;
}
int main()
{
long long n,m;
cin>>n>>m;
cout<<C(n,m);
cout<<endl;
return 0;
}
方法2
/*解题思路:
1:类似于杨辉三角形,除边界外,其值也等于两肩上的值的和,
如C(8,5)=C(7,5)+C(7,4);
2:针对边界如C(8,0)=1等不影响,条件不满足自动往下;
*/
#include<iostream>
using namespace std;
long long C(int n,int m)
{
long long t=1;
if(m==0||m==n)
return 1;
else
return C(n-1,m)+C(n-1,m-1);
}
int main()
{
long long n,m;
cin>>n>>m;
cout<<C(n,m);
cout<<endl;
return 0;
}