问题:求n个不同数的全排列,并打印输出。并求出有多少个全排列。

代码:

void static swap(int* M, int* N)//两数交换
{
	int tem = *M;
	*M = *N;
	*N = tem;
}

//求若干个不同数的全排列
void f6(int a[], int k, int length)//k表示起始位置,length表示末尾位置
{
	register int i = 0;
	if (k == length)
	{
		for (i = 0; i <= length; i++)
		{
			printf("%d", a[i]);
		}
		printf("\n");
	}
	else
	{
		for (i = k; i <= length; i++)
		{
			swap(&a[k], &a[i]);
			f6(a, k + 1, length);
			swap(&a[k], &a[i]);
		}
	}
}

int main()
{
    int a[] = {1,2,3,4,5};
    int length = sizeof(a) / sizeof(a[0]) - 1;
     f6(a, 0, length);
     system("pause");
     return 0;
}

测试结果:

至于全排列个数,很简单,就是n的阶乘,直接计算即可。 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐