算法—实现排列 A(n,m)

本文介绍了一个使用C语言实现的排列算法,该算法通过递归方式计算A(n,m)的所有可能排列,并输出排列总数及具体排列组合。代码详细展示了如何避免数字重复以及递归调用的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/* 实现排列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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什码情况

你的鼓励就是我最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值