欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数的全排列

程序员文章站 2022-03-22 19:21:57
...

数的全排列

  1. 题目介绍

将数1~n全部排列出来,每个数字都得出现且只能出现一次

  1. 代码展示

#include <stdio.h>
int a[1001];
void f(int n,int k)
{
	if(k==n+1)
	{
		for(int z=1;z<=n;z++)
			printf("%d",a[z]);
		printf("\n");
		return;
	}	
	int count=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<k;j++)
			if(i!=a[j])
				count++;
        if(count==k)
        {
        	a[k]=i;
        	f(n,k+1);
		}
		count=1; 
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	f(n,1);
	return 0;
}
  1. 思路分析

此处用递归的方法,用一个数组a[]保存每一层所用的数字,每次都要找出与前面的已用的数字不同的数字。递归出口就是n个数字都已经用掉,接着输出a[]。
此处我们假设n=3:

开始
是否到达出口?
输出数组
找出与之前所有数字不同的数字并填入数组
不同的数字为x
不同的数字为y
......
进入函数的下一层
相关标签: 全排列