重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
long long permutation(int m, int n)
创新新互联,凭借十余年的网站制作、成都网站建设经验,本着真心·诚心服务的企业理念服务于成都中小企业设计网站有成百上千家案例。做网站建设,选创新互联建站。
{
int i;
long long result = 1;
for (i = m; i m - n; i--)
result *= i;
return result;
}
这个函数计算A(n,m),即n(n-1)(n-2)……(n-m+1)
1、求排列组合没有简单方法。方法只有一个,枚举。有几个位置需要列举,就需要几个循环。如果循环数量太多,可以用函数递归来枚举。
2、例程:
#includestdio.h
int main(){
int a[4]={1,3,4,7}; //第一个位置
int b[4]={2,5,8,10}; //第二个位置
int c[4]={6,9,11,12}; //第三个位置
int i,j,k;
for(i=0;i4;i++)
for(j=0;j4;j++)
for(k=0;k4;k++)
printf("%d %d %d\n,",a[i],b[j],c[k]);//输出一种排列
getch();
return 0;
}
答:因为解决组合问题要用到阶乘,计算机系统不可能直接计算较大数的阶乘。如:本机: ULLONG_MAX = 18446744073709551615 为20位数,最大可计算 20! = 2432902008176640000 为19位数,以上是64位计算机、windows7(32位)、gcc10编译器的情况,所以不可能解决输入任意多个元素的问题。必须根据自己的系统来决定最多可以求多少元素的组合问题。