#include <iostream>
using namespace std;
long long jc(int n)
{
long long s=1;
int i ;
for (i=1;i<=n;i++)
{
s*=i;
}
return s;
}
long long Cnm(int n,int m)
{
return jc(n)/jc(m)/jc(n-m);
}
int main()
{
int n,i;
long long s1,s2=0,t;
cin >> n;
//scanf("%d",&n);
s1 = Cnm(2*n,n);
for(i=1;i<=n;i++)
{
t = Cnm(n,i);
s2 += t*t;
}
if(s1==s2)
cout << "Yes";//printf("yes");
else
cout<< "No";//printf("no");
return 0;
}
先求C(n,2n)
再求C(0,n)^2+C(1,n)^2+……+C(n,n)^2
再进行比较
#include <iostream>
using namespace std;
unsigned long long Cnm(unsigned int n,unsigned int m)
{
if(m==n||m==0)
return(1);
else
return(Cnm(n-1,m-1)+Cnm(n-1,m));
}
int main()
{
unsigned int n=1,i=1;
unsigned long long s1,s2=0,t;
cin>>n;
s1 = Cnm(2*n,n)-1;
for(i=1;i<=n;i++)
{
t = Cnm(n,i);
s2 += t*t;
}
cout<<s1<<endl;
cout<<s2<<endl;
if(s1==s2)
cout<<"yes";
else
cout<<"no";
return 0;
}
这个 C(2n,n)该怎么理解啊,是从2n个数中取n个数的组合吗?