/* 实现排列A(n,m)*/
#include "stdio.h"
int m,n,a[30];
long s=0;
int main()
{
int p(int k);
printf("input n(n<10):"); scanf("%d",&n);
printf("input m(<1m<=n):"); scanf("%d",&m);
p(1); //从第1个数开始
printf("\n总数为:%ld\n",s); //输出A(n,m)的值
return 0;
}
//排列递归函数p(k)
int p(int k)
{
int i,j,u;
if(k<=m)
{
for(i=1;i<=n;i++)
{
a[k]=i; //探索第K个数赋值i
for(u=0,j=1;j<=k-1;j++)
if(a[k]==a[j]) //若出现重复数字
u=1; //若第K个数不可置,u=1
if(u==0) //若第k个数可置,则检查是否到m个数
{
if(k==m) //若以到m个数,则打印出一个解
{
s++;printf(" ");
for(j=1;j<=m;j++)
printf("%d",a[j]);
if(s%10==0) printf("\n");
}else p(k+1); //若没到m个数,则探索下一个P(K+1)
}
}
}
return s;
}
算法—实现排列 A(n,m)
最新推荐文章于 2022-06-01 09:30:00 发布