#include<iostream>
using namespace std;
int sum=1;
int jiecheng(int n,int out){
if(n==0) return 0;
out*=sum++;
if(sum==n+1) return out;
jiecheng(n,out);
}
int main(){
int n,out=1,m,N,M,NM,A,C;
cout<<"输入n,m的值:"<<endl;
while(cin>>n>>m) {
N=jiecheng(n,out);
out=1;
sum=1;
if(n-m==0){
NM=jiecheng(1,out);
}
else{
NM=jiecheng((n-m),out);
}
A=N/NM;
out=1;
sum=1;
M=jiecheng(m,out);
out=1;
sum=1;
C=A/M;
cout<<"选择你进行的操作:按1求排列;按2求组合:"<<endl;
int xuanze;
cin>>xuanze;
if(xuanze==1){
cout<<"共有"<<A<<"种排列方式"<<endl;
}
else if(xuanze==2){
cout<<"共有"<<C<<"种组合方式"<<endl;
}
cout<<endl;
cout<<endl;
cout<<"输入n,m的值:"<<endl;
}
return 0;
}
有帮助望采纳,谢谢!
#include <iostream>
#include <cstdio>
using namespace std;
double C(int n,int m) //通过递归求解组合C(n,m)的值
{
if(m==0||m==n)
return 1;
else
return C(n-1,m)+C(n-1,m-1);
}
double A(int n,int m) //通过递归求解排列A(n,m)的值
{
if(m==1)
return n;
else
return n*A(n-1,m-1);
}
int main()
{
int n=0,m=0;
cout<<"输入n,m(保证n>=m):";
cin>>n>>m;
if(n<m)
cout<<"输入有误!"<<endl;
else
{
printf("排列:A(n,m)=%.0lf\n",A(n,m));
printf("组合:C(n,m)=%.0lf\n",C(n,m));
}
return 0;
}