求C(N, M),即求M个数中选N个数的组合方案数,该如何解决
求C(N, M),即求M个数中选N个数的组合方案数
源代码是这样的,哪里错啦,怎么输不出正解啊??求指点。
#include<iostream>
using namespace std;
int main()
{
int n,i;
long int a,b,sub,sum;
cin>>n;
while(n--)
{
cin>>a>>b;//N=a,M=b
for(i=0;i<a-1;i++)
a*=(a-1);
for(i=0;i<b-1;i++)
b*=(b-1);
sub=b-a;
for(i=0;i<sub-1;i++)
sub*=(sub-1);
sum=b/(a*sub);
cout<<sum<<endl;
}
return 0;
}
------解决方案--------------------
#include<iostream>
using namespace std;
int main()
{
int n,i;
long int a,b,sub,sum;
cin>>n;
while(n--)
{
cin>>a>>b;//N=a,M=b
int a1 = a, b1 = b;
for(i=a-1;i>0;i--)
a1*=i;
for(i=b-1;i>0;i--)
b1*=i;
sub=b-a;
for(i=sub-1;i>0;i--)
sub*=i;
sum=b1/(a1*sub);
cout<<sum<<endl;
}
return 0;
}
------解决方案--------------------
源代码是这样的,哪里错啦,怎么输不出正解啊??求指点。
#include<iostream>
using namespace std;
int main()
{
int n,i;
long int a,b,sub,sum;
cin>>n;
while(n--)
{
cin>>a>>b;//N=a,M=b
for(i=0;i<a-1;i++)
a*=(a-1);
for(i=0;i<b-1;i++)
b*=(b-1);
sub=b-a;
for(i=0;i<sub-1;i++)
sub*=(sub-1);
sum=b/(a*sub);
cout<<sum<<endl;
}
return 0;
}
------解决方案--------------------
#include<iostream>
using namespace std;
int main()
{
int n,i;
long int a,b,sub,sum;
cin>>n;
while(n--)
{
cin>>a>>b;//N=a,M=b
int a1 = a, b1 = b;
for(i=a-1;i>0;i--)
a1*=i;
for(i=b-1;i>0;i--)
b1*=i;
sub=b-a;
for(i=sub-1;i>0;i--)
sub*=i;
sum=b1/(a1*sub);
cout<<sum<<endl;
}
return 0;
}
------解决方案--------------------
- C/C++ code
#include <iostream> using namespace std; int main() { int n,i; long int a,b,sum; cin>>n; while(n--) { cin>>a>>b;//N=a,M=b sum = 1; for(i = b; i >= b - a; --i) sum *= i; cout<<sum<<endl; } getchar(); return 0; }